【发布时间】:2014-04-30 19:07:33
【问题描述】:
我有一个自定义的UITableViewCell,里面有一个UITextField。当使用 iOS 7 目标运行应用程序并单击单元格中的UITextField 时,didSelectRowAtIndexPath 会触发,但indexPath 是nil。当我在 iOS 6.1 模拟器中运行相同的代码时,indexPath 不是 nil。
我的第一个问题是“为什么会发生这种变化?”
我的第二个问题是“获得活动 indexPath 行的最佳方法是什么”,因为我无法再使用 didSelectRowAtIndexPath 获得它?
下面的代码有效,但感觉 hack-ish。
-(UITableViewCell *) cellFromEdit: (UITextField *) field {
UIView *view = field.superview;
while (view) {
if ([view isKindOfClass:[UITableViewCell class]])
return (UITableViewCell *) view;
view = view.superview;
}
return nil;
}
- (void)textFieldDidChange:(UITextField *)theTextField {
UITableViewCell *cell = [self cellFromEdit:theTextField];
if (!cell)
return;
int row = [tableView indexPathForCell:cell].row;
【问题讨论】:
-
我没有看到这个。我有一个表格视图,其中包含包含文本字段的单元格。文本字段不会覆盖整个单元格。如果我只在文本字段中点击,
didSelectRowAtIndexPath:甚至不会被调用。如果我确实在文本字段之外点击单元格,则会调用它并且它具有正确的索引路径。 -
我记得在 iOS 7 beta 上看到过这样的错误,但它在更高的 beta 版本中得到了修复。我想这是您的代码中的问题。如果没有看到您的原始代码,我们无法就正确的解决方案提供建议。还要确保文本字段在单元格的内容视图中,否则会发生很多有趣的事情。
标签: objective-c