如何获取父导航控制器

Posted

技术标签:

【中文标题】如何获取父导航控制器【英文标题】:how to get parent navigation controller 【发布时间】:2017-06-20 13:46:41 【问题描述】:

在我的AppDelegate 中,我有一个主要的NavigationController,它是来自第三方框架的“抽屉控制器”。在那里,我有更多的控制器,在我的pageTabBarController 中,每个页面都有一个PostsViewControllerPostsViewController 包含一个表格视图。 我的目标是在用户点击表格视图中的单元格时将其导航到新控制器。

查看 AppDelegate.swift 设置:

var viewControllers = [NavigationController]()

for name in categories 
    let navTmp = NavigationController(rootViewController: 
    PostsViewController(category: name))
    navTmp.navigationBar.isHidden = true
    viewControllers.append(navTmp)


let pageTabBarController = AppPageTabBarController(viewControllers: viewControllers)

let toolbarController = AppToolbarController(rootViewController: pageTabBarController)
let menuMainController = MenuViewController()
let drawerController = AppNavigationDrawerController(rootViewController: toolbarController, leftViewController: menuMainController)

window = UIWindow(frame: Screen.bounds)
window!.rootViewController = drawerController
window!.makeKeyAndVisible()

我相信我需要父导航控制器来执行此操作。请耐心等待,我是 swift 新手。但同样,我的目标是在用户点击单元格时将其导航到新控制器。

编辑:回顾一下,看起来我需要将该控制器类嵌入到导航控制器中,并将一个连接到每个 PostsViewController

【问题讨论】:

【参考方案1】:

看来您正在使用 CosmicMind 的材料。因此,您必须将导航视图控制器的代码放在特定 UIViewController 类中的 tableView 委托中,不是AppDelegate 中。

【讨论】:

是的,我正在使用材料。我试过了,但我无法让它工作——我尝试实例化一个导航控制器,在里面放一个新的视图控制器,然后推动它,但什么也没发生 :( 不需要这样做,您只需在视图控制器中处理要开始导航的导航,这里是PostsViewController 。现在关注它里面的tableView,当用户点击tableViewCell时,代理didSelectRowAt被调用,在这里做你的工作:让nextVC = NewViewController() //或者在这里实例化视图控制器。 navigationController?.pushViewController(nextVC, animated: true) 你解释得不够好,让像我这样的新手马上就能理解,但我终于明白了。谢谢!

以上是关于如何获取父导航控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何在没有导航控制器的情况下获取导航栏后退按钮

导航回父视图控制器时,UIButton 在选项卡栏后面 - iOS

目标 C:如何从当前 ViewController 后面的 ViewController 获取导航控制器

显示没有父级的另一个导航子控制器

如何从 NSObject 类获取导航控制器并在 ios 中推送视图控制器

如何在 Swift iOS 中仅在最后一个屏幕上获取导航栏?