UITableView 的 indexPathForCell:总是返回 0 作为 indexPath.row

Posted

技术标签:

【中文标题】UITableView 的 indexPathForCell:总是返回 0 作为 indexPath.row【英文标题】:UITableView's indexPathForCell: returns always 0 as indexPath.row 【发布时间】:2012-10-12 12:09:46 【问题描述】:

我有一个 UITableView,里面有自定义单元格。此自定义单元格看起来像样式为“Detail Left”的普通单元格。但我的自定义单元格有一个详细标签和一个文本字段,以允许用户编辑文本。我有一个保存按钮,我想保存用户输入的所有数据。我使用本教程制作了自定义单元格:http://agilewarrior.wordpress.com/2012/05/19/how-to-add-a-custom-uitableviewcell-to-a-xib-file-objective-c/#comment-4883

为了获取用户数据,我将文本字段的委托设置为表格视图控制器(self)并实现了 textFieldDidEndEditing: 方法。在这种方法中,我询问文本字段的父视图(= 单元格)并询问此单元格的 indexPath。问题是,无论我编辑什么单元格,indexPath.row 总是得到 0。我做错了什么?

这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:[CustomCell reuseIdentifier] forIndexPath:indexPath];
if (cell == nil) 
    [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = self.customCell;
    self.customCell = nil;


cell.label.text = @"Some label text";
cell.editField.delegate = self;
cell.accessoryType = UITableViewCellAccessoryNone;

return cell;


- (void)textFieldDidEndEditing:(UITextField *)textField

CustomCell *cell = (CustomCell *) textField.superview;

NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];

NSLog(@"the section is %d and row is %d", indexPath.section, indexPath.row);
...

编辑:我刚刚发现,返回的 indexPath 为零。所以如果它是 nil 我得到标准值 0,那没关系。但是现在:为什么我的 indexPath 是 nil?

【问题讨论】:

这是一个类似的线程,说明了原因***.com/questions/6930026/… 【参考方案1】:

我自己找到了解决方案。我在***中找到了superview的代码,所以我只是复制了它。但这不起作用。你需要像这样做两个超级视图:

CustomCell *cell = (CustomCell *) textField.superview.superview;

现在可以正常使用了!

【讨论】:

【参考方案2】:

您能否将index 属性添加到您的CustomCell 并在(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 内填充indexPath.row

【讨论】:

好主意,我这样做了,但我收到一条错误消息“无法识别的选择器已发送到实例... [UITableViewCellContentView indexPath]”(我调用了属性 indexPath)。所以,我有点困惑为什么 cell 现在是 UITableViewCellContentView 而不是我的 CustomCell。

以上是关于UITableView 的 indexPathForCell:总是返回 0 作为 indexPath.row的主要内容,如果未能解决你的问题,请参考以下文章

水平 UITableView 中的垂直 UITableView

将 UITableView 推送到 UITableView

如何与重叠显示的 UITableView 交互另一个 UITableView

UITableView

iOS小技能:1. 什么是UITableView? 2. UITableView如何展示数据

UITableView 优化总结