0

我试图实现以下目标:

假设我们在一个导航控制器中,并且我们推送了一个 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];

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

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

4

2 回答 2

0

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

UINavigationControllerDelegate

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

UITabBarControllerDelegate

– tabBarController:shouldSelectViewController:
– tabBarController:didSelectViewController:
– tabBarController:willBeginCustomizingViewControllers:
– tabBarController:willEndCustomizingViewControllers:changed:
– tabBarController:didEndCustomizingViewControllers:changed:
于 2013-02-06T12:51:44.477 回答
0

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

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

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

于 2013-02-06T13:02:15.317 回答