2012-03-13 96 views
0

背景:查詢所選單元格的UITableView以顯示「刪除」按鈕

我有一個UITableView來顯示數組中的數據。當數組數量大於0時,我正在利用KVO在導航欄中顯示「編輯」按鈕,並在計數爲0時將其自身移除。這是正常工作的。編輯時,我將一個「刪除」欄按鈕項目作爲正確的欄按鈕項目。這也工作得很好。按預期刪除按鈕默認情況下啓用。表視圖具有multipleSelectionDuringEditing設置爲YES。我可以選擇多個項目並正確刪除它們。我的目標是在刪除按鈕處於禁用狀態時進入編輯狀態,直到選擇至少1個項目,然後在有0個選擇時禁用。我嘗試了一些東西,但他們沒有結果。我試圖擁有一個NSMutableSet屬性(私有),我可以監視它的數量並適當地啓用/禁用刪除按鈕。但是,我碰到了牆壁。 tableView:DidSelectRowAtIndexPath:只在編輯時被初始選擇時調用,而不是在取消選擇該行時調用。我是否忽略了在編輯模式下監控表格選擇的能力?提前致謝。另外,如果我要將「刪除」按鈕移動到UIToolbar並且還包括一個「全部刪除」按鈕,是否有辦法選擇所有行(即使那些不可見)?

+0

你提到那個tableView:DidSelectRowAtIndexPath:當一行被取消選擇時不被調用。這是正確的,但tableView:didDeselectRowAtIndexPath:被調用,所以你可以在那裏更新你的變量。 – lnafziger 2012-03-13 23:49:29

+0

是的,我在下面提到我完全忽略了這種方法。疲憊的眼睛我猜。謝謝! – 2012-03-14 01:22:31

回答

1

根據文檔,在表視圖上調用-indexPathsForSelectedRows可以告訴您現在有多少個選擇,並且您的代理的-tableView:didDeselectRowAtIndexPath:應該在用戶取消選擇行時調用。

我沒有看到用於以編程方式選擇多行的方便方法。如果您正在執行「全部刪除」命令,那麼刪除底層模型對象然後讓表更新(也就是不用擔心首先選中它們)可能更合適。您可以使用-deleteRowsAtIndexPaths:withRowAnimation:和/或-deleteSections:withRowAnimation:來製作動畫;無論哪種方式,您都必須爲自己枚舉要刪除哪些行/部分,但表格部分/行與您的模型對象集合之間的對應關係應該非常簡單明瞭,尤其是在您對所有內容感到厭煩的情況下。

+0

謝謝!完全忽略了-tableView:didDeselectRowAtIndexPath:我很確定這是我需要在刪除之前管理選擇。關於選擇多行,我想我沒有很注意Messages.app是如何做的。 「全部清除」行中的行並未全部選中。呈現一張行動表,然後擦除。 – 2012-03-13 23:29:35

相關問題