我试图实现以下目标:
让我们想象一下,我们在导航控制器中,我们推出了一个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从一个导航控制器移动到另一个导航控制器?有任何想法吗?
答案 0 :(得分:0)
查看UINavigationControllerDelegate
和UITabBarControllerDelegate
方法。
它们允许您在按下/弹出控制器或选择选项卡时执行某些操作:
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。