如何找出属于当前 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 上创建了一个新的导航控制器。 我很好,因为一切正常,但我需要在第二个导航控制器上显示按钮。 我试图以编程方式将按钮添加到与当前视图关联的导航控制器。我正在使用此代码: 此代码似乎没有将按钮添加到当前导航控制器。 这个项目使用的是 Swift 3 和 Xcode 8override 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)
【问题讨论】:
【参考方案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