我在每个UITableView中都有一个UITextFieldUITableViewCells。我的ViewController中有一个处理每个单元格文本字段的“退出时结束结束”事件的方法,我想做的就是用新文本更新模型数据。

我目前拥有的是:

- (IBAction)itemFinishedEditing:(id)sender {
    [sender resignFirstResponder];

    UITextField *field = sender;
    UITableViewCell *cell = (UITableViewCell *) field.superview.superview.superview;

    NSIndexPath *indexPath = [_tableView indexPathForCell:cell];

    _list.items[indexPath.row] = field.text;
}

当然,执行field.superview.superview.superview是可行的,但似乎太hacky了。有没有更优雅的方式?如果我将UITextField的标签设置为它在indexPath.row中的单元格的cellForRowAtIndexPath,即使在插入和删除行之后,该标签也总是正确的吗?

对于那些密切关注的人,您可能会认为我的.superview太多了,而对于iOS6,您将是正确的。但是,在iOS7中,单元格内容 View 和单元格本身之间的层次结构中存在一个额外的 View (NDA阻止了我的形式细化)。这恰好说明了为什么执行 super View 操作有点笨拙,因为这取决于知道UITableViewCell的实现方式,并且可能会随着OS的更新而中断。

最佳答案

由于您的目标实际上是获取文本字段的索引路径,因此可以执行以下操作:

- (IBAction)itemFinishedEditing:(UITextField *)field {
    [field resignFirstResponder];

    CGPoint pointInTable = [field convertPoint:field.bounds.origin toView:_tableView];

    NSIndexPath *indexPath = [_tableView indexPathForRowAtPoint:pointInTable];

    _list.items[indexPath.row] = field.text;
}

关于ios - 如何从其 subview 之一获取UITableViewCell,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17757806/

10-11 14:43