从 swift 中的另一个 class 访问 navigationBarController
Accessing navigationBarController from another class in swift
我想从我的主 class HomeController 访问 class MyNavigationBarController.swift 中的导航栏。这是因为我在不同的视图控制器中重复使用导航栏,我想减少此时的冗余。当我在 HomeController.swift 中集成该功能时,它工作正常。
但是,当我将导航 class 设为单独的导航时,启动模拟器时不再显示导航栏。
我觉得问题出在 "self.view" 但我不知道如何解决这个问题。
Swift 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")
}
}
你是对的。问题是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)
我想从我的主 class HomeController 访问 class MyNavigationBarController.swift 中的导航栏。这是因为我在不同的视图控制器中重复使用导航栏,我想减少此时的冗余。当我在 HomeController.swift 中集成该功能时,它工作正常。
但是,当我将导航 class 设为单独的导航时,启动模拟器时不再显示导航栏。
我觉得问题出在 "self.view" 但我不知道如何解决这个问题。
Swift 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")
}
}
你是对的。问题是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)