我想从主类HomeController访问MyNavigationBarController.swift类中的导航栏。这是因为我在不同的视图控制器中重用导航栏,并且我希望在这一点上减少冗余。当我在HomeController.swift中集成该功能时,它工作得很好。
但是,当我将导航类作为一个单独的类时,在启动模拟器时不再显示导航栏。
我觉得问题出在“self.view”上,但我不知道如何解决这个问题。
斯威夫特4
家庭控制器.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")
}

}

最佳答案

你是对的。问题是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)

关于swift - 从另一个类快速访问NavigationBarController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51273589/

10-14 16:51
查看更多