滚动和插入新行后,奇怪的UITableView行为(Weird UITableView behavi

2019-09-18 09:44发布

这是真的快把我逼疯了。

我有一个显示客户的排序列表中的表视图。 用户可以添加新的客户,因此我必须添加一个新行表视图(通过更新数据模型,并呼吁insertRowsAtIndexPaths:withRowAnimation: 然而,由于表视图进行排序,该插件可发生关屏,这是不是很漂亮WRT。 用户体验。 所以我的想法是,以表视图滚动到刀片将实际插入的行之前发生的索引路径:

- (void)finishedSavingNewCustomer:(Customer*)customer atIndex:(NSInteger)index {
    // NOTE: self.customers (which is the model for the table view used in all datasource
    // methods) has already been updated at this point, ie. it already contains the new customer

    // scroll the table view so that the insert position is on-screen
    NSInteger scrollRow = (index < ([self.customers count] - 1) ? index : [self.customers count] - 2);
    NSIndexPath* scrollIndexPath = [NSIndexPath indexPathForRow:scrollRow inSection:0];
    [self.tableView scrollToRowAtIndexPath:scrollIndexPath atScrollPosition:UITableViewScrollPositionNone animated:NO];

    // insert the new row
    NSArray* indexPaths = [NSArray arrayWithObject:[NSIndexPath indexPathForRow:index inSection:0]];
    [self.tableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationFade];
}

这段代码实际上按预期工作:表视图卷轴和新行正确插入。

然而,在插入后,一些表视图细胞变得“irresponsive”,即。 他们将不会显示在刷卡删除按钮和选择时甚至不突出。 由于这是非常奇怪和有点难以解释,让我试着来说明吧。

初始状态:行1 - 5显示:

--------- screen top --------
Row 1
Row 2
Row 3
Row 4
Row 5
------- screen bottom -------
Row 6
Row 7
Row 8 
Row 9

滚动和插入后的情况:

Row 1
Row 2
Row 3
Row 4
Row 5
--------- screen top --------
Row 6
Row 7
Row 7a  << newly inserted
Row 8 
Row 9
------- screen bottom -------

现在,插入行后1 - 5将不会对用户交互如上所述作出响应。

任何人都经历过这样的问题吗? 想法? 是否有其他方法,以确保新行的插入是可见的用户?


更新:在设备上只是测试,事实证明,这个问题只发生在模拟器上! 这使得这个问题不太愉快,但我仍然有兴趣,如果别人已经经历了这种行为。

Answer 1:

我曾与一些模拟器类似的经历最近 - 我处理的应用从核心数据驱动多表视图,而且还提出了通过应用在不同的点了一堆UIAlertViews和UIActionSheets的。

我注意到,该模拟器不响应以及UI操作(表格单元格中插入,动作片显示等)发生后立即触摸事件。 它通常可以帮助我要么

  • 切换到另一个窗口然后再返回到模拟器或
  • 点击,并通过仿真的一些触摸无效区域拖动鼠标,然后尝试我还要再次行动

你的旅费可能会改变。 这可能是测试期间的疼痛,但只要一切正常的设备上,你应该罚款。



文章来源: Weird UITableView behavior after scrolling and inserting new row