为什么我的tableview没有滚动到请求的indexPath?

时间:2013-08-10 12:37:54

标签: ios uitableview custom-cell nsindexpath

我在视图中有一个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];

         }
}

知道它为什么不滚动到当前不在屏幕上的任何单元格?

谢谢,

2 个答案:

答案 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
});