【问题标题】:Add Right Button In NavigationController在 NavigationController 中添加右键
【发布时间】:2017-09-16 15:22:18
【问题描述】:

我有故事板设置,所有视图控制器扩展导航控制器,类 NavigationController: UINavigationController, UIViewControllerTransitioningDelegate 自定义导航栏设置导航控制器类 CustomNavigationBar:UINavigationBar 这是 NavigationController 的代码

class NavigationController: UINavigationController, UIViewControllerTransitioningDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

这是CustomNavigationBar的代码

class CustomNavigationBar: UINavigationBar {

    override func awakeFromNib() {
        var font = UIFont(name: "Montserrat-Light", size: 17)!
        if "ar" == userLocale() {
            font = UIFont(name: "DroidSansArabic", size: 17)!
        }
        let attribtutes = [
            NSFontAttributeName: font,
            NSForegroundColorAttributeName: UIColor.black,
            NSKernAttributeName: 5.0
            ] as [String : Any]
        UINavigationBar.appearance().titleTextAttributes = attribtutes
        UINavigationBar.appearance().tintColor = UIColor.black
        UINavigationBar.appearance().backgroundColor = UIColor.white

        let image = UIImage(named: "back-btn")
        UIBarButtonItem.appearance().setBackButtonTitlePositionAdjustment(UIOffsetMake(0, -66), for: .default)
        UINavigationBar.appearance().backIndicatorImage = image
    }
}

到目前为止一切顺利,我现在想添加一个带有自定义视图的右栏导航项。我尝试在NavigationController::viewDidLoad()中添加以下代码

let customView:UIView = UIView()
customView.backgroundColor = .green
customView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
let item = UIBarButtonItem(customView: customView)
self.navigationItem.setRightBarButton(item, animated: false)

由于某种原因,它没有显示在导航菜单中。我哪里错了?

【问题讨论】:

  • 您需要在基本视图控制器中添加self.navigationItem.setRightBarButton(item, animated: false) 部分,因为每个视图控制器都有自己的导航项,这就是您的自定义按钮不显示的原因
  • 如您所见,我已在 NavigationController 中添加了该内容。我还需要在所有其他 ViewController 中添加它吗?
  • 如果您使用 baseViewController 并将此实现添加到他的 viewDidLoad 中,并且您将所有其他 viewController 子类化为您的 baseViewController 您只需添加一次
  • 我尝试将它添加到一个视图控制器中,它确实有效。我现在希望它适用于所有带有导航菜单的视图控制器。
  • 明白了,说得通。

标签: swift swift3 uinavigationcontroller uinavigationbar


【解决方案1】:

您需要在基本视图控制器中添加自定义导航按钮代码部分,因为每个视图控制器都有自己的navigationItem这就是为什么您的自定义按钮没有显示

您需要使用 BaseViewController 类来满足您的需要,然后从 BaseViewController 继承所有 viewController,您只需在 viewDidLoad 中添加一次导航按钮自定义代码

类似的东西

class BaseViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let customView:UIView = UIView()
        customView.backgroundColor = .green
        customView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
        let item = UIBarButtonItem(customView: customView)
        self.navigationItem.setRightBarButton(item, animated: false) 
    }

}

【讨论】:

    【解决方案2】:

    您可以让 NavigationController 类符合 UINavigationControllerDelegate 协议,并在 navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) 方法中修改目标控制器的 navigationItem:

    extension RootNavigationController: UINavigationControllerDelegate {
    func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
        if let viewController = viewController as? YOURCONTROLLER {
            viewController.navigationItem.setRightBarButton(YOURITEM, animated: false) 
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2018-07-03
      • 1970-01-01
      • 2011-11-20
      • 2018-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多