将另一个视图控制器推送到 UITabBarController 视图中
Posted
技术标签:
【中文标题】将另一个视图控制器推送到 UITabBarController 视图中【英文标题】:Push another view controller into a UITabBarController view 【发布时间】:2011-09-09 14:44:51 【问题描述】:对于我的应用程序中的导航,我使用的是 UITabBarController。这很好用,但是在我的一个视图控制器中,我想将另一个视图控制器推入标签栏视图。 换句话说,我想用另一个替换选定的视图控制器。 我正在使用以下代码执行此操作:
self.tabBarController.selectedViewController = self.otherViewController;
我的 TabBarController 中的 viewController 列表不包含 otherViewController。 这个技巧在 ios 4.3 中运行良好,但 IOS 5 不喜欢它。
有人知道IOS 5 接受的解决方案吗?
【问题讨论】:
【参考方案1】:您想用另一个视图控制器替换标签栏中的视图控制器吗? 如果是这样,您必须通过设置一个新属性来编辑标签栏中的 viewControllers 属性。它会是这样的:
UIViewController *thisIsTheViewControllerIWantToSetNow;
int indexForViewControllerYouWantToReplace;
NSMutableArray *tabbarViewControllers = [self.tabbar.viewControllers mutableCopy];
[tabbarViewControllers replaceObjectAtIndex:indexForViewControllerYouWantToReplace withObject:thisIsTheViewControllerIWantToSetNow];
self.tabbar.viewControllers = tabbarViewControllers;
[tabbarViewControllers release];
【讨论】:
这行得通,但你必须使用 NSMutableArray(你的 viewController 数组的 mutableCopy) 哦,是的,你是对的,我在没有 Xcode 的情况下输入了这个,让我意识到 replaceObjectAtIndex:withObject 不存在,除非它是一个 NSMUTABLEArray 那是 wỏk,但是标签栏的图标不见了,当我触摸另一个标签并返回时,我认为在更改视图时它是“滞后”【参考方案2】:您不能只在此选项卡上使用导航控制器或类似的控制器吗?
无论如何这应该工作:
NSMutableArray *controllers = [NSMutableArray arrayWithArray:rootTabBarController.viewControllers];
[controllers replaceObjectAtIndex:rootTabBarController.selectedIndex withObject: newController];
rootTabBarController.viewControllers = controllers;
【讨论】:
以上是关于将另一个视图控制器推送到 UITabBarController 视图中的主要内容,如果未能解决你的问题,请参考以下文章
我可以将视图控制器推送到后端的 UINavigationController
iOS - pushViewController 推送到 nil 视图控制器
如何将视图控制器推送到 UISplitViewController