当选择表行时,如何从原型UITableViewCell获取控件?

时间:2014-11-12 08:22:37

标签: ios objective-c uitableview

我有UITableView原型UITableViewCell。在每一行的内部,我都有一个按钮(图像),每次选择行时我必须将其设置为选中/未选中。我的原型单元使用自定义类,并在Interface Builder中进行设计。我尝试使用this问题的答案,但它不起作用。它告诉我UITableViewCell没有这样的属性,当我尝试使用我的自定义类时,它也给了我警告。如何解决这个问题?

我的代码如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    ///UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.self.btnCellSelect.selected = YES;

    [self updateValues];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

2 个答案:

答案 0 :(得分:2)

在访问之前,您需要将单元格转换为您的类。

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];

    YourCustomCellClass *cell = (YourCustomCellClass *)[tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.self.btnCellSelect.selected = YES;
    [self updateValues];
    [tableView reloadData];
}

答案 1 :(得分:1)

核心问题是你的cellForRowAtIndexPath实际上正在返回你的子类的一个实例,但方法签名说它返回标准的超类UITableViewCell。

答案是将此对象强制转换为您的类。 SAFE的方法是通过类型检查返回的单元格然后强制转换。

if ([cell isKindOfClass:[YourSubclass class]]) {
    YourSubclass *subclassCell = (YourSubclass *)cell;
    //Other stuff
}