2016-07-19 53 views
1

我想要處理用戶通過點擊此行取消選擇行(已選中)的情況。衆所周知,tableView:willDeselectRowAtIndexPath:/tableView:didDeselectRowAtIndexPath:代表方法在這種情況下不會被調用:只有當您點擊其他未選中的行(我的表視圖具有單選模式)時纔會調用它們。在表格視圖中取消選擇行

tableView:didSelectRowAtIndexPath:方法在取消選擇行時也不會調用。

是否有任何簡單的解決方案?

更新

的問題是在tableView:willSelectRowAtIndexPath:方法,在那裏我在某些情況下返回nil,這就是爲什麼tableView:didSelectRowAtIndexPath:沒有打電話。感謝@Nekto提供有用的信息和幫助。

回答

0

蘋果文件說接下來的約- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

當表的編輯屬性設置爲YES時不能調用此方法(即表視圖在編輯模式)。

這意味着應該調用此方法,除非您的代碼有bug或者您沒有更新表視圖的delegate或表處於編輯模式。

其中一個可能的問題可能是您錯誤地執行了- (NSIndexPath *)tableView:(UITableView *)tableView willDeselectRowAtIndexPath:(NSIndexPath *)indexPath並且返回nil用於選定的行。在這種情況下,不叫didSelect...

如果您不希望取消該行,請返回nil。

或者,也可以實現其他表視圖委託方法:- (void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath

告知該亮點是從行的指定索引路徑中移除該委託。

查看更多關於管理表格視圖here中的選擇。

1

我有這樣的用例。爲什麼你不爲lastSelectedRow創建一個變量(這裏我有問題,如果它是NSIndexPath,我用了兩個整數)以及選擇行的方法只是比較currentSelectedRowlastSelectedRow

+0

didSelectRowAtIndexPath方法不叫 –

+0

您可以在控制器中一個手勢,並將其添加和刪除它didSelectRowAtIndexPath方法,但是這不是很好的解決辦法:) – m1sh0

1

你仍然可以使用tableView:didSelectRowAtIndexPath,只需使用它就像一個複選標記系統將工作。

答案here解釋瞭如何使用複選標記。你可以使用這個,或者使用回答here

+0

didSelectRowAtIndexPath方法不叫 –

+0

那是因爲你已經選擇了它......我強烈推薦使用複選標記。 – Jacolack

+0

但是在你提供的鏈接中,他們使用了didSelectRowAtIndexPath方法。我錯了嗎? –

相關問題