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

Posted

技术标签:

【中文标题】为啥我的 tableview 没有滚动到请求的 indexPath?【英文标题】:Why is my tableview not scrolling to the requested indexPath?为什么我的 tableview 没有滚动到请求的 indexPath? 【发布时间】:2013-08-10 12:37:53 【问题描述】:

我的视图中有一个 tableView 并且一切正常,但是每个自定义单元格 (ToDoListCell) 都有一个文本字段,我允许用户编辑、更新他们的数据。一切都很好,每当尝试滚动到将被键盘隐藏的单元格时,都会出现我的问题。

注意:我按照 Apple 文档的建议使用 NSNotificationCenter 观察者方法调整表的大小,我知道这不是问题。

- (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];

         

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

谢谢,

【问题讨论】:

【参考方案1】:

只是猜测,但可能是因为

ToDoListCell *cell = (ToDoListCell *)[self.table cellForRowAtIndexPath:currentIndexPath];

返回nil 导致cell.titleField.isEditing == YES 总是失败。所以滚动命令永远不会被调用。表格视图只保留可见单元格,因此如果您调整了表格视图的大小以使正在编辑的单元格不再可见,您可能会得到nil 回来。在调整表格大小之前,您需要确定正在编辑的单元格的索引路径。

【讨论】:

【参考方案2】:

如果您触发代码以响应通知侦听器,您是从 UI 线程触发通知吗?

除非在主线程上执行,否则 UI 动画将不会执行。

dispatch_async(dispatch_get_main_thread(), ^
   // send notification
);

【讨论】:

以上是关于为啥我的 tableview 没有滚动到请求的 indexPath?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 tableView 不向下滚动就不会更新?

我的 UITableView 不会向下滚动到数据的末尾!为啥?

为啥tableView不允许滚动查看footerView?

为啥我的 Tableview 重用了一些单元格?

在使用两个嵌套的 alamofire 请求滚动之前,TableView 不显示数据

为啥当我向下滚动iOS(tableView内的collectionview)时取消选择单元格?