从自定义UITableViewCell访问indexPath

时间:2011-02-19 13:02:33

标签: iphone uitableview nsindexpath

我正在尝试创建一个UITableView,允许用户输入数据,类似于许多UITableViews设置,带有一些文本字段和其他表格视图的标注复选框。对于应用程序中的这种常见功能,这似乎不是很直接。

我无法从自定义UITableViewCell访问indexPath.row。这是我分配自定义UITableViewCell的地方。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}

在我的TextField类的@implementation中, - (id)initWithStyle:我正在尝试使用以下命令访问indexPath:

NSIndexPath *indexPath = [(UITableView *)self.superview indexPathForCell:self];

...为了设置textfield的标签,如:

textRow = [[UITextField alloc] initWithFrame:CGRectMake(0, 0, 200, 21)];
textRow.tag = [indexPath row];

任何人都可以对我的问题有所了解,或者指出我以编程方式创建基本设置风格的TableViews。

谢谢

1 个答案:

答案 0 :(得分:3)

我认为问题可能是在你的单元初始化时它没有被添加到UITableView中 - 因此self.superview返回nil。

UITableViewCell *cell = (UITableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[TextFieldCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];      
}
[cell setTag:indexPath.row];

您需要在TextFieldCellClass中添加setTag:方法。我假设代码在cellForIndexPath或其他内部,因此indexPath将传递给该方法。

set tag方法应该如下所示:

-(void)setTag:(int)tag {
    textRow.tag = tag;
}