1

我有以下VC層次結構:ParentViewController - >導航控制器(子VC) - > ViewController(與UITableView)。UITableView重新加載數據,當推新viewController

我遇到以下問題: 在UITableViewDelegate.didSelectRowAtIndexPath中,應用程序正在堆棧上推送新的ViewController。問題是,在這個階段,表視圖會自動重新加載,而不會顯式調用reloadData。這個事實產生了幾個問題,例如返回到屏幕(使用「後退」按鈕)時,表視圖在開始處滾動而不是集中在所選行上。

你能幫我找到爲什麼它這樣做,它是一個錯誤,或如何解決這個問題?

更新:我剛纔測試了相同的情況下,在iOS 7.1並沒有像沒什麼事,我的意思是推着的viewController,比坡平回包含的UITableView中的viewController沒有選定行的鬆動焦點。 enter image description here

+0

如果使用的UITableViewController然後設置,clearselectiononviewwillappear爲NO。否則,您可能必須跟蹤所選行,並在viewWillAppear觸發器的時候,將其設置爲選中狀態並將其滾動到可見點。 – Sandeep 2014-11-08 11:48:02

+0

這不是一個UITableViewController。對於另一種情況,應用程序的體系結構,不能讓我在viewWillAppear中執行。我也試過viewDidAppear,但在視覺上它不好。 – 2014-11-08 12:06:18

+0

你只是推/視圖控制器?任何自定義的繼續或過渡?該堆棧跟蹤似乎表明電視正在改變窗口,並因此調整大小,從而觸發重新加載。 – pbasdf 2014-11-08 12:16:39

回答

0

希望這可以幫助你。

我的解決方案是使用navigationviewcontroller委託,保存選擇何時會推另一個,並在回彈時退回。

我的示例代碼(我已經設置表視圖控制器作爲代表)

static NSIndexPath* path = nil; 

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if (viewController == self) 
    { 
     [self.tableView reloadData]; 
     [self.tableView selectRowAtIndexPath:path animated:NO scrollPosition:UITableViewScrollPositionMiddle]; 
    } 
} 

- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    path = self.tableView.indexPathForSelectedRow; 
} 
+0

我不認爲將NSIndexPath設置爲靜態是個好主意。 – 2015-02-13 12:04:55

+0

當然,你可以在代碼中設置任何你想要的東西,它只是一個解決這類問題的概念,所以我的關鍵是使用委託來避免iOS8中的tableview機制,而不是設置變量的方式。 – SoSo 2015-02-17 05:33:21