2015-09-19 179 views
0

通过为方法编写处理程序tableView:didEndDisplayingCell:forRowAtIndexPath:,我能够检测到从UITableView中删除单元格的时间。每当从显示中删除单元格时,都会调用此方法。但是,有一个例外。如何检测从iOS的uitableview中删除单元格的边界情况?

当电池具有的UITextField和场是第一响应者,甚至当它的卷离显示器和它之前和之后立即将细胞这种方法不会被调用。

该单元格也被确认从UITableView中删除,同时将单元格从屏幕滚动出来进行测试。在这种情况下,调用cellForRowAtIndexPath:返回nil。

我还对UITableViewCell进行了分类,并为removeFromSuperView编写了一个处理程序。当这个方法从屏幕上滚动出去时,除了当单元格有一个UITextField并且它是第一个响应者时,这个方法也会被调用。

另一个要注意的是,在单元格中的UITextField接受键盘输入,同时它滚动到屏幕和呼叫的cellForRowAtIndexPath:返回nil。当单元格滚动回查看时,我可以看到这一点。

有没有人有任何解决方案来检测何时单元格滚动出视图,以便控制器可以访问到UITextField

回答

0

您可以尝试在之前手动退出您的第一响应者手动该单元消失。根据您的要求,这可以通过多种方式完成,通常在用户开始滚动时。如果单元格仍然可见,则可以在完成滚动后恢复第一个响应者。从图形设计的角度来看,可能也会更好。

或者,您可以尝试实现委托的tableView:willDisplayCell:forRowAtIndexPath:并创建一个先前可见的单元格集合,您将与tableview的visibleCells数组相交。不在当前可见细胞中但在之前的元素已被删除。然后将可见细胞的拷贝分配给previousVisibleCells。

这可能是Apple代码中的一个错误,您可以为它提供一个雷达。

+0

感谢您花时间回复。我一直在努力,因为我觉得应该有一个简单的解决方案。您的回复让我再次想到了UIScollView类和代表。在查看方法时,我注意到了keyboardDismissMode属性。其中一个值是UIScrollViewKeyboardDismissModeOnDrag。我回到UIBuilder,并设置表视图的值以关闭拖动键盘。 Voila,这迫使UITextField无需任何代码就辞职第一响应者。这是我需要的完美解决方案。完善!!! – Litehouse

+0

太棒了。不知道那个。感谢分享。 –

相关问题