簡體   English   中英

tableView:didDeselectRowAtIndexPath:直到第一次用戶啟動的選擇和取消選擇才調用

[英]tableView:didDeselectRowAtIndexPath: not called until first user-initiated selection and deselection

我在單個選擇模式下有一個帶有四個單元格的UITableView 首次加載視圖時,我將基於存儲的首選項使用-selectRowAtIndexPath:animated:scrollPosition:以編程方式選擇一個單元格。 此后,用戶可以與表進行交互。

每當用戶點擊任何單元格時,都會在我的表視圖委托上調用-tableView:willSelectRowAtIndexPath:-tableView:didSelectRowAtIndexPath:方法。 但是,直到用戶手動點擊第一個以編程方式選擇的單元格后, -tableView:willDeselectRowAtIndexPath:-tableView:didDeselectRowAtIndexPath:才開始被調用。

知道為什么會這樣嗎? 除了為用戶-[UITableView selectRowAtIndexPath:animated:]的每個單元格手動調用-[UITableView selectRowAtIndexPath:animated:] ,是否還有其他解決方法?

如果您確實過早調用[UITableView selectRowAtIndexPath:animated:],並且正在使用UITableViewController,則可能與UIViewController clearsSelectionOnViewWillAppear沖突(默認為YES)。 嘗試設置self.clearsSelectionOnViewWillAppear = NO; 在您的viewDidLoad中

這個評論太長了,因此我將其發布為答案。

剛剛使用tableView創建了測試項目。 我在viewDidLoad上調用[UITableView selectRowAtIndexPath:animated:] ,並且選擇了一個單元格。 然后,我選擇另一個單元格(不取消選擇第一個單元格)。

我有這個輸出:

[SDTVTViewController tableView:willSelectRowAtIndexPath:]    
[SDTVTViewController tableView:willDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didDeselectRowAtIndexPath:]    
[SDTVTViewController tableView:didSelectRowAtIndexPath:]

我取消選擇了第一個單元格,然后選擇了第二個單元格。

我不知道為什么它在您的代碼中不起作用。 當您調用[UITableView selectRowAtIndexPath:animated:] ,是否可以發布已實現的UITableViewDelegate方法的代碼?

我正在包裝初始數據源更新和-selectRowAtIndexPath:...調用

[_tableView beginUpdates];
// ...
[_tableView endUpdates];

顯然,類似於-reloadData ,這將清除當前選擇(不確定是否是設計-reloadData )。 我搬到調用-selectRowAtIndexPath:...-endUpdates現在一切按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM