从另一个类快速访问NavigationBarController

时间:2018-07-10 20:41:55

标签: swift navigationbar

我想从主类HomeController中访问类MyNavigationBarController.swift中的导航栏。这是由于以下事实:我在不同的视图控制器中重用了导航栏,并且此时我想减少冗余。当我将功能集成到HomeController.swift中时,它可以正常工作。

但是,当我将导航类设为单独的导航类时,启动模拟器时不再显示导航栏。

我觉得问题出在“ self.view”上,但我不知道该如何解决。

快捷键4

HomeController.swift

class HomeController: UIViewController {

let myNavigator = MyNavigationBarController()

override func viewDidLoad() {
    super.viewDidLoad()

    // load navigation bar
    myNavigator.setNavigationBar()
}

MyNavigationBarController.swift

class MyNavigationBarController: UINavigationController {

let navBar = UINavigationBar()

func setNavigationBar() {
    navBar.translatesAutoresizingMaskIntoConstraints = false
    let navItem = UINavigationItem(title: "")
    let statusItem = UIBarButtonItem(title: "Status", style: .plain, target: self, action: #selector(status))

    navItem.rightBarButtonItem = statusItem

    navBar.setItems([navItem], animated: false)

    self.view.addSubview(navBar)
}

@objc func status() {
    print("hello")
}

}

1 个答案:

答案 0 :(得分:1)

你是对的。问题是self.view。您需要将其添加到控制器的视图。您可以这样更改功能:

func setNavigationBarInView(_ view:UIView) {
    navBar.translatesAutoresizingMaskIntoConstraints = false
    let navItem = UINavigationItem(title: "")
    let statusItem = UIBarButtonItem(title: "Status", style: .plain, target: self, action: #selector(status))

    navItem.rightBarButtonItem = statusItem

    navBar.setItems([navItem], animated: false)

    view.addSubview(navBar)
}

然后:

myNavigator.setNavigationBarInView(view)