[英]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.