标签栏应用。是否可以在不同的导航控制器中推/弹视图控制器?

时间:2013-02-06 12:36:52

标签: ios cocoa-touch uinavigationcontroller uitabbarcontroller

我试图实现以下目标:

让我们想象一下,我们在导航控制器中,我们推出了一个ViewController。用户点击标签栏的其他项目。在我们移动到另一个视图控制器之前,我想弹出(动画)推送的视图控制器,但我希望新的视图控制器作为根,所以当推出的视图控制器消失时它会出现。

很难解释,我只是想让新的视图控制器出现时,由于popToRootViewController的动画而不是旧的视觉控制器出现,然后只是移动到新视图控制器。

想象一下,我们在选项卡栏中的选项b中,它对应于视图控制器B,并且有一个C视图控制器被推送。

A

B - > ç

用户按a,

我希望这种情况发生

A - > ç

B - > ç

然后选择一个viewController,然后弹出两个C,在A情况下动画,而在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从一个导航控制器移动到另一个导航控制器?有任何想法吗?

2 个答案:

答案 0 :(得分:0)

查看UINavigationControllerDelegateUITabBarControllerDelegate方法。 它们允许您在按下/弹出控制器或选择选项卡时执行某些操作:

UINavigationControllerDelegate

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

UITabBarControllerDelegate

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

答案 1 :(得分:0)

我认为这是非常糟糕的用户界面设计,Apple会反对,并且你会违反Apple人机界面指南(HIG)。我认为您的应用会与用户期望的行为不同。

TabBarControllers各个标签适用于应用的离散/不同区域,不适用于在应用的单个区域内移动。希望这是有道理的。

我建议你最好使用一个带有toolBar的navigationController代替tabBar,然后在一个导航堆栈中弹出pop。