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

Posted

技术标签:

【中文标题】如何找出属于当前 viewController 的导航控制器?【英文标题】:How do I find out the navigation controller that is part of the current viewController? 【发布时间】:2016-09-14 19:26:28 【问题描述】:

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

这是我所拥有的:

我将初始视图作为导航控制器。此控制器调用多个视图,但我遇到问题的视图是 UICollectionViewController。这是通过单击连接到 navigationController 的第一个 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

【问题讨论】:

【参考方案1】:

使用

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解释了这个原因。

【讨论】:

我没有先尝试过,但都没有成功。有趣的是 rightBarButtonItem 正在显示。 克里,你有正确的答案,但是像我这样的其他傻瓜不会忽视这一点,我拼错了图像名称。感谢您的帮助。

以上是关于如何找出属于当前 viewController 的导航控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭当前的 ViewController 并在 Swift 中更改为新的 ViewController?

如何在 iOS 中找到当前可见的 viewController

如果当前打开特定的 ViewController,如何检查 AppDelegate

如何从 Sprite Kit 场景中引用当前的 Viewcontroller

如何在同一类的 awakeFromNib 方法中获取当前视图控制器?

如何关闭当前的 ViewController 并在 Swift 中转到另一个视图