iOS的執行了VC執行了popToRootViewControllerAnimated之後再直接執行VC.tabBarController.selectedIndex不管用解讀

前言

今天我在使用VC.tabBarController.selectedIndex的時候出現了這個問題,我首先用導航控制器跳轉了很多個界面,然後想直接回到根控制器tabBarController的其他的控制器上,也就是執行VC.tabBarController.selectedIndex = 1這樣的操作,可以直接操作的呀,當然肯定行了,會有個問題就是你再點擊之前的那個標籤控制器的話,還是顯示之前那個界面並沒有回到首頁。所以我的打算就是先回到導航控制器的根控制器的,然後再切換根控制器。

遇到的問題

[viewVC.navigationController popToRootViewControllerAnimated:NO];
viewVC.tabBarController.selectedIndex = 1;

我這樣寫的看上去很正常的,但是結果就是隻執行了pop的方法,但是下面雖然也執行了,但是並沒有作用,標籤控制器並沒有切換,只是回到根控制器了。後來嘗試讓他們切換一下前後位置,很奇怪的事居然可以行的通了,都執行了,切回來的時候而且之前也回到首頁了。

分析原因

其實,我之後分析一下,就可以很明白的看出來什麼原因,我們可以看到執行[viewVC.navigationController popToRootViewControllerAnimated:NO];之後,這個操作是把棧上面的數據都清空,只保留棧底的數據,所以viewVC被推出棧的時候,也就釋放了ViewVC變爲nil,這個時候執行了,viewVC.tabBarController.selectedIndex肯定不起作用了呀,viewVC = nil。我們再來看一下先執行viewVC.tabBarController.selectedIndex
再執行popToRootViewControllerAnimated方法時候,我們知道tabBarController標籤控制器的的子控制器navigationController是不會被釋放的,除非程序kill或者crash纔會被釋放,所以我們先執行viewVC.tabBarController.selectedIndex時,在執行了之後ViewVC還是在navigationController的棧中,沒有被釋放,所以再執行popToRootViewControllerAnimated也是行的通的。

解決辦法

    viewVC.tabBarController.selectedIndex = 1;
    viewVC.tabBarController.tabBar.hidden = NO;
    if (![viewVC isEqual:focusNav.viewControllers.firstObject]) {
        [viewVC.navigationController popToRootViewControllerAnimated:NO];
    }

之所以viewVC.tabBarController.tabBar.hidden = NO;這句代碼,防止tabbar隱藏了,保證不隱藏。這樣就可以解決問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章