0

我試圖做到以下幾點:標籤欄應用程序。是否可以在不同的導航控制器中推送/彈出視圖控制器?

讓我們想象我們在導航控制器,我們有一個ViewController推。用戶點擊標籤欄的其他項目。在我們移動到另一個視圖控制器之前,我想彈出(動畫)推送的視圖控制器,但是我希望新的視圖控制器作爲一個根,所以它顯示爲被推動的視圖控制器消失。

很難解釋,我只是希望新的視圖控制器出現時,推動的一個正在消失由於popToRootViewController的動畫,而不是舊的出現,然後只是移動到新的。

想象一下,我們在與視圖控制器B相對應的選項卡欄中的選項b中,並且推送了C視圖控制器。

一個

乙 - >ç

在用戶按下,

我希望這種情況發生

A - >ç

乙 - >ç

然後選擇一個viewController,然後彈出兩個C,在A的情況下動畫, d在B案件中不動畫。

這是我的代碼:

[(UINavigationController *)self.tabBar.selectedViewController popToRootViewControllerAnimated:NO]; 
    UIViewController * viewControllerToPush = self.tabBar.selectedViewController; 

    self.tabBar.selectedIndex = indexPath.row; 

    [(UINavigationController *)self.tabBar.selectedViewController pushViewController:viewControllerToPush animated:NO]; 
    [(UINavigationController *)self.tabBar.selectedViewController popToRootViewControllerAnimated:YES]; 

但其沒有工作,我得到「推導航控制器,不支持」

是否有可能從一個導航控制器移動viewControllers到另一個?有任何想法嗎?

回答

0

看看UINavigationControllerDelegateUITabBarControllerDelegate的方法。 他們將允許您按下時/彈出一個控制器時,或者選擇一個選項卡執行一些操作:

UINavigationControllerDelegate

– navigationController:willShowViewController:animated: 
– navigationController:didShowViewController:animated: 

UITabBarControllerDelegate

– tabBarController:shouldSelectViewController: 
– tabBarController:didSelectViewController: 
– tabBarController:willBeginCustomizingViewControllers: 
– tabBarController:willEndCustomizingViewControllers:changed: 
– tabBarController:didEndCustomizingViewControllers:changed: 
0

我認爲這是非常糟糕的UI設計和蘋果會反對,你會違反蘋果人機界面指南(HIG)。我認爲你的應用的行爲與用戶期望的不同。

TabBarControllers單個選項卡用於應用程序的離散/不同區域,不適用於在應用程序的單個區域移動。希望這是有道理的。

我建議你最好使用單個導航控制器,並在工具欄的底部替換tabBar,然後在一個導航堆棧中按下彈出窗口。

相關問題