【问题标题】:Tab bar app. Is it possible to push/pop view controllers in different navigation controllers?标签栏应用程序。是否可以在不同的导航控制器中推送/弹出视图控制器?
【发布时间】:2013-02-06 12:36:51
【问题描述】:

我正在努力实现以下目标:

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

这很难解释,我只是希望新的视图控制器出现在推送的视图控制器由于 popToRootViewController 的动画而消失时,而不是旧的视图控制器出现然后移动到新的视图控制器。

想象一下,我们在标签栏的选项 b 中,对应于视图控制器 B,并推送了一个 C 视图控制器。

一个

B -> C

用户按a,

我希望发生这种情况

A -> C

B -> C

然后选择A 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];

但它不起作用,我得到“不支持推送导航控制器”

是否可以将视图控制器从一个导航控制器移动到另一个?有任何想法吗?

【问题讨论】:

    标签: ios cocoa-touch uinavigationcontroller uitabbarcontroller


    【解决方案1】:

    看看UINavigationControllerDelegateUITabBarControllerDelegate 方法。 它们将允许您在推动/弹出控制器或选择选项卡时执行一些操作:

    UINavigationControllerDelegate

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

    UITabBarControllerDelegate

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

    【讨论】:

      【解决方案2】:

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

      TabBarControllers 各个选项卡用于应用程序的离散/不同区域,而不是用于在应用程序的单个区域中移动。希望这是有道理的。

      我建议您最好使用一个在底部带有工具栏的导航控制器来代替 tabBar,然后只需在一个导航堆栈中推送 pop。

      【讨论】:

        猜你喜欢
        • 2014-12-09
        • 2012-06-23
        • 1970-01-01
        • 2018-09-24
        • 2011-09-18
        • 2011-10-31
        • 1970-01-01
        • 1970-01-01
        • 2019-10-03
        相关资源
        最近更新 更多