我有一個UITableView的客戶選擇行/客戶。然後用戶可以在UINavigationController堆棧上推送另一個視圖來添加新的客戶。當我彈出子屏幕並返回到UITableView時,不再選擇先前選擇的行。從UINavigationController子屏幕返回時,如何維護UITableView選定行?
我可以重新選擇viewDidAppear()中的行,但它看起來很糟糕,因爲您可以看到取消選擇和選擇。從子屏幕返回時是否有辦法維護選定的行?
我有一個UITableView的客戶選擇行/客戶。然後用戶可以在UINavigationController堆棧上推送另一個視圖來添加新的客戶。當我彈出子屏幕並返回到UITableView時,不再選擇先前選擇的行。從UINavigationController子屏幕返回時,如何維護UITableView選定行?
我可以重新選擇viewDidAppear()中的行,但它看起來很糟糕,因爲您可以看到取消選擇和選擇。從子屏幕返回時是否有辦法維護選定的行?
默認情況下,當您返回到該VC時,所選行將被取消選擇(使用動畫)。
因此,如果您推送DetailViewController,單元格會保持選定狀態,直到您返回到RootViewController,然後自動取消選定。
我以前也有過這樣的問題。確保始終調用超類的方法實現,如viewWillAppear,viewWillDisappear等。
另外,請勿手動調用deselectRowAtIndexPath:。
您不能始終選擇tableViewCell。一旦達到目的,它會恢復正常。我想你的意思是突出顯示或似乎被選中,我正在回答這個問題。
獲取在cellForRowAtIndexPath
處選擇的行。當你彈出你的導航控制器並返回到tableView,去cellForRowAtIndexPath
,並突出顯示該單元格(你可以使用任何UIColor,如你所願) - 沒有具體的方式來突出東西 - 使用你的想象力 - 默認高亮風格是藍色,而文字是白色。
這是如何完成的?
cellForRowAtIndexPath
NSUserDefaults
,你也可以使用NSUserDefaults
屏幕之間進行通信,以找出是否項目是從該屏幕彈出。viewWillAppear
cellForRowAtIndexPath
檢查值NSUserDefaults的和[tableView reloadData]
修改細胞與cell.backgroundColor
什麼的。這是不正確的。看看我的答案,以保持表格視圖單元格高亮顯示,並在頁面轉換中保持突出顯示。 –
你需要調用:
[tableView deselectRowAtIndexPath:indexPath animated:YES];
這在一個UITableView的didSelectRowAtIndexPath方法委託方法被發現。
如何幫助解決當用戶從子視圖返回到主視圖時選擇行的目標?這不會導致行不被選中? – ChrisP
如果您在viewWillAppear中選擇它,則應該在用戶沒有看到它的情況下進行選擇。這能解決你的問題嗎?
這就是我所嘗試的並且重新選擇對用戶可見。我希望視圖能夠顯示在已選擇的行上,就像用戶離開屏幕時向下鑽取子屏幕一樣。 – ChrisP
如果沒有一些代碼,我可以只給一個忠告:停止使用[tableView reloadData]
,使用[tableView beginUpdates]
,[tableView endUpdates]
和– insertRowsAtIndexPaths:withRowAnimation:
和– reloadRowsAtIndexPaths:withRowAnimation:
。事情應該按預期工作。
我假設你使用的是一個表視圖控制器,否則它是你的責任,無論如何寫這種行爲。但在表格視圖控制器中,這很容易。只需添加在viewDidLoad中:
self.clearsSelectionOnViewWillAppear = NO;
這將保留該行選擇,除非你手動取消選擇該行或在用戶選擇上表中的另一行。
這是可能的:
只有一次的情況:如果您在泰伯維靜態內容,
just reload the TableView in ViewDidLoad only, not in View will Appear.
whereas make sure, you don't allow table to reload anywhere in same class in any method. Then you can achieve what you want.
細胞得到,因爲重裝泰伯維的取消。
但對於動態內容,你需要使用的委託方法:
- (void)selectRowAtIndexPath:(NSIndexPath *)indexPath animated:(BOOL)animated scrollPosition:(UITableViewScrollPosition)scrollPosition;
在此,你需要傳遞要示與scrollPostion選擇相同tableviewposition的indexPath。
並通過選定,你的意思是突出顯示? – Legolas
爲了語義的興趣,API調用ChrisP希望的狀態爲「selected」。視覺外觀是一個亮點,但蘋果將其稱爲選擇。例如'setSelected:','didSelectRowAtIndexPath:'等。 –