这是真的快把我逼疯了。
我有一个显示客户的排序列表中的表视图。 用户可以添加新的客户,因此我必须添加一个新行表视图(通过更新数据模型,并呼吁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将不会对用户交互如上所述作出响应。
任何人都经历过这样的问题吗? 想法? 是否有其他方法,以确保新行的插入是可见的用户?
更新:在设备上只是测试,事实证明,这个问题只发生在模拟器上! 这使得这个问题不太愉快,但我仍然有兴趣,如果别人已经经历了这种行为。