2015-09-19 47 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

太棒了。不知道那個。感謝分享。 –

相關問題