从 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 选项卡[重复]

使用情节提要时切换 UIViewController

如何通过按 UIButton 从数组中切换 UIViewController 中的 UIImages

iOS:如何从 UIViewController 通知 appDelegate