如何找出属于当前 viewController 的导航控制器?

How do I find out the navigation controller that is part of the current viewController?

我有 在导航控制器上显示按钮时出现问题。我对此进行了研究,我认为这与导航的工作方式有关。从堆栈中推送和弹出。

这是我的:

我有一个导航控制器的初始视图。此控制器调用多个视图,但我遇到问题的视图是 UICollectionViewController。这是通过单击第一个连接到导航控制器的 viewController 上的按钮调用的。然后我有一个从 UICollectionViewCell 到新 ViewController 的 segue 设置。所以我假设这是二级 NavigationController。

其次,我有一个后退按钮图像显示在我的导航栏上,而不是文本 <返回。

后退按钮在导航控制器中的所有视图上都显示正常,但从第二级 segue 调用的视图除外。

据我阅读有关此主题的其他帖子了解到,这是因为在第二级 segue 上创建了一个新的导航控制器。

我没意见,因为一切正常,但我需要按钮显示在第二个导航控制器上。

我试图以编程方式将按钮添加到与当前视图关联的导航控制器。我正在使用此代码:

override func viewDidLoad() {
    super.viewDidLoad()
    var image = UIImage(named: "NavLogo")
    var back_image = UIImage(named: "BackButton")
    image = image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
    back_image = back_image?.withRenderingMode(UIImageRenderingMode.alwaysOriginal)


    self.navigationController?.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.plain, target: nil, action: nil)

    self.navigationController?.navigationItem.leftBarButtonItem = UIBarButtonItem(image: back_image, style: UIBarButtonItemStyle.plain, target: nil, action: nil)
 }

此代码似乎没有将按钮添加到当前导航控制器。

这个项目正在使用 Swift 3 和 Xcode 8

使用

self.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.plain, target: nil, action: nil)

而不是

self.navigationController?.navigationItem.rightBarButtonItem = UIBarButtonItem(image: image, style: UIBarButtonItemStyle.plain, target: nil, action: nil)

原因在link中解释。