我有UITableView
一个UITextField
在每个UITableViewCells
.我在我的ViewController中有一个方法,它处理每个单元格的文本字段的"Do End On Exit"事件,我想要做的是用新文本更新我的模型数据.
我现在拥有的是:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
当然做起field.superview.superview.superview
作用,但它似乎是如此hacky.有更优雅的方式吗?如果我设置的标签UITextField
到indexPath.row
其在细胞中的cellForRowAtIndexPath
意志标签总是甚至插入和删除行后是正确的?
对于那些密切关注的人,你可能会认为我有一个.superview
太多,而对于iOS6,你是对的.但是,在iOS7中,在单元格的内容视图和单元格本身之间的层次结构中有一个额外的视图(NDA阻止我形成详细说明).这恰恰说明了为什么做superview的事情有点hacky,因为它取决于知道如何UITableViewCell
实现,并且可以打破操作系统的更新.
rma*_*ddy 31
由于您的目标是获取文本字段的索引路径,因此您可以这样做:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
Cez*_*zar 12
一种稍微好一点的方法是遍历视图层次结构,检查每个超级视图是否UITableViewCell
使用该class
方法.这样,您就不会受到您UITextField
和单元格之间的超级视图数量的限制.
有点像:
UIView *view = field;
while (view && ![view isKindOfClass:[UITableViewCell class]]){
view = view.superview;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7595 次 |
最近记录: |