我在每个UITableView
中都有一个UITextField
和UITableViewCells
。我的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/