viewController 在用于 UINavigationController 时从 [tabBarController viewControllers] 数组中移除
Posted
技术标签:
【中文标题】viewController 在用于 UINavigationController 时从 [tabBarController viewControllers] 数组中移除【英文标题】:viewController gets removed from [tabBarController viewControllers] array, when used for UINavigationController 【发布时间】:2012-12-19 14:50:38 【问题描述】:我有一个带有 5 个 ViewController 的 TabBar。我正在使用 tabBarController 数组来填充 SideBarMenu,就像在 Facebook 应用程序中一样。
当我使用 viewController 设置为 UINavigationController 的 RootViewController 时,此 viewController 将从数组 [self.tabBarController viewControllers] 中删除。
为什么会发生这种情况,我该如何预防?
return [[UINavigationController alloc] initWithRootViewController:
[[self.tabBarController viewControllers] objectAtIndex:0]];
objectIndex 0 处的 viewController 被删除,[self.tabbarcontroller viewControllers] 只返回 4 个 viewController。
【问题讨论】:
【参考方案1】:一个 UIViewController 只能有一个父级。当您将视图控制器从选项卡栏添加到导航控制器时,导航控制器会将视图控制器与其先前的父级分离并将其附加到自身。有关为什么会发生这种情况的更多信息,请阅读 UIViewController 文档的实现容器视图控制器部分。
【讨论】:
啊好吧,这很有趣。你能推荐我一种如何将我所有的 viewControllers 全局用作数组的方法吗?我正在将我的应用程序从标签栏应用程序转换为侧边菜单应用程序 您可以使用其他视图控制器将用户的导航代理到全局视图控制器。例如,考虑按下侧菜单中的一个项目可以指示标签栏切换到适当的视图控制器。当标签栏切换时,它会突出显示当前项目。当然,你也可以用另一种方式来做——让侧边菜单成为视图的实际容器,标签栏按钮会告诉侧边菜单要做什么。以上是关于viewController 在用于 UINavigationController 时从 [tabBarController viewControllers] 数组中移除的主要内容,如果未能解决你的问题,请参考以下文章
viewController 在用于 UINavigationController 时从 [tabBarController viewControllers] 数组中移除
一个用于多个 ViewController 的网络处理程序类
(目标:对象)不适用于从 viewController 外部设置 UIButton
无法在 Swift 中获取 UITextField 的 .text 属性 - 错误:“实例成员 'textFieldName' 不能用于类型 'ViewController'