从 UIViewController 切换到 navigationController 内的其他 ViewController
Posted
技术标签:
【中文标题】从 UIViewController 切换到 navigationController 内的其他 ViewController【英文标题】:Switch from UIViewController to other ViewController which is inside navigationController 【发布时间】:2014-11-06 23:52:25 【问题描述】:我有以下看法:
TabBarController
包括 (MapViewController
, NavigationController
)
导航控制器包括需要切换到的DetailViewController
。
以下代码用于MapViewController
。
现在我的代码:
let eventDetailViewController : EventDetailViewController = self.storyboard?.instantiateViewControllerWithIdentifier("EventDetail") as EventDetailViewController
eventDetailViewController.event = event
self.showViewController(eventDetailViewController, sender: self)
这可行,但导航控制器没有洞察力(例如,我无法转到 firstviewcontroller
)。
如何通过导航控制器触发此代码?
下面是故事板的截图。从左到右:TabbarController -> NavigationController 和 MapController。导航控制器-> 事件控制器。最正确的视图是EventDetailView
【问题讨论】:
EventDetailViewController是导航控制器的根视图控制器吗? 你能澄清一下1)导航控制器的rootViewController是什么? 2)“firstViewController”在哪里出现? 3) 你想在哪里/如何显示 eventDetailViewController?您是否希望将其“推送”到位于 tabBarController 的单独选项卡中的导航控制器上?还是在 MapView 顶部模态显示(在导航控制器中)? 解释这个问题让我头疼。从 Navigationcontroller 开始: NavigationController 的 rootViewController 被称为 EventController。事件控制器有一个表格视图,当单击单元格时,它会从中显示详细视图控制器。我希望将视图推送到导航控制器上。很抱歉造成混乱,我自己也很困惑。 在didSelectRowAtIndexPath
函数中尝试以下操作:self.navigationController.pushViewController(eventDetailViewController, animated: YES)
(与上面使用的前两行相同)
我需要从标签栏控制器中包含的 MapController 执行此推送。我认为这才是真正的问题。它已经在 didselectrow... 函数中工作了。再次为您的困惑感到抱歉!
【参考方案1】:
所以,在您的 MapView 中,self.tabBarController
将指向 tabBarController。从您的情节提要中看起来,导航控制器是第一个选项卡,因此将位于 tabBarController 的 viewControllers
属性中的索引 0 处。所以你应该能够做到以下几点:
let eventDetailViewController : EventDetailViewController = self.storyboard?.instantiateViewControllerWithIdentifier("EventDetail") as EventDetailViewController
eventDetailViewController.event = event
let navController : UINavigationController = self.tabBarController.viewControllers[0] as UINavigationController
navController.pushViewController(eventDetailViewController, animated:YES)
self.tabBarController.selectedIndex = 0
我还在学习 Swift,所以你可能需要整理一些可选项/展开 - 但我希望你能明白要点。
【讨论】:
感谢您的回复。这解决了我的问题。有时我需要添加一个?但除此之外;这行得通!以上是关于从 UIViewController 切换到 navigationController 内的其他 ViewController的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式从 UINavigationController (storyboard) 切换到 UIViewController
从 UIViewController 切换到另一个时如何保持 UILongPressGestureRecognizer 处于活动状态
从单独的 UIViewController 切换 UITabBarController 选项卡[重复]