将另一个视图控制器推送到 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

如何将新的 viewController 推送到另一个视图控制器中的现有视图中?

如何更改压入堆栈的视图控制器的标题颜色?