我在视图中有一个tableView,一切正常,但是每个自定义单元格(ToDoListCell)都有一个文本字段,我允许用户编辑,更新他们的数据。一切都很好,每当试图滚动到一个将被键盘隐藏的单元格时,我的问题就出现了。
注意:我使用NSNotificationCenter观察器方法调整表的大小,如Apple文档所建议的那样,我知道这不是问题。
- (void)scrollToSelectedCell {
NSIndexPath *currentIndexPath = [NSIndexPath indexPathForItem:0 inSection:0];
while (currentIndexPath.row < self.todos.count) {
ToDoListCell *cell = (ToDoListCell *)[self.table cellForRowAtIndexPath:currentIndexPath];
if (cell.titleField.isEditing == YES) {
[self.table scrollToRowAtIndexPath:currentIndexPath atScrollPosition:UITableViewScrollPositionMiddle animated:YES];
break;
}
currentIndexPath = [NSIndexPath indexPathForItem:currentIndexPath.row + 1 inSection:0];
}
}
知道它为什么不滚动到当前不在屏幕上的任何单元格?
谢谢,
本
答案 0 :(得分:0)
只是一个猜测,但可能是因为
ToDoListCell *cell = (ToDoListCell *)[self.table cellForRowAtIndexPath:currentIndexPath];
返回nil
,导致cell.titleField.isEditing == YES
始终失败。所以从不调用scroll命令。表视图仅保留在可见单元格中,因此如果您调整了表格视图的大小,使得正在编辑的单元格不再可见,那么您可能会返回nil
。在调整表格大小之前,您需要确定正在编辑的单元格的索引路径。
答案 1 :(得分:0)
如果要响应通知侦听器而触发代码,是否从UI线程触发通知?
除非在主线程上执行,否则UI动画将无法执行。
dispatch_async(dispatch_get_main_thread(), ^{
// send notification
});