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

时间:2016-09-14 19:26:29

标签: ios uicollectionview swift3 navigationcontroller

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

这就是我所拥有的:

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

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

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

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

我很好,因为一切正常,但我需要按钮显示在第二个navcontroller上。

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

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 个答案:

答案 0 :(得分:3)

使用

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