在我的应用程序中,当我在textFieldDidEndEditing:
中提交编辑更改时,我需要能够跟踪识别UITextField来自哪个单元格。为此,我只在tableview:cellForRowAtIndexPath:
的单元格文本字段中设置tag属性。
当细胞移动时,这会引起一些麻烦。例如,如果我将底部单元格移动到顶部,删除现在位于底部的单元格,然后尝试编辑我刚放在顶部的单元格,我的应用程序将崩溃,因为标记属性仍然是8 (或其他数字),但我的数据源中没有这么多元素。
我尝试通过更新tableView:moveRowAtIndexPath:toIndexPath:
- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
NSString *siteToMove = [[sites objectAtIndex:[fromIndexPath row]] retain];
[sites removeObjectAtIndex:[fromIndexPath row]];
[sites insertObject:siteToMove atIndex:[toIndexPath row]];
if ([toIndexPath section] == 1) {
[[(BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath] textField] setTag:[toIndexPath row]];
}
}
但是,这不起作用,因为(BookmarkTextEntryTableViewCell *)[[self tableView] cellForRowAtIndexPath:toIndexPath]
会在移动行之前返回那里的单元格。
答案 0 :(得分:1)
在- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath
方法中,您可以将您可能已添加为子视图的所有UITextField
遍历到表中,然后检查并将新标记设置为 -
for (UIView* subview in [[self tableView] subviews]) {
if ([subview isKindOfClass:[UITextField class]]) {
if(subview.tag==oldTag){
subview.tag = newTag;
break;
}
}
}
编辑:第二个想法,你可以重新加载表数据,以防重置所有剩余单元格的标签。