如何从单独的类访问导航控制器内的标题?我通过情节提要将mainVC
嵌入到导航控制器中。我可以像这样self.navigationItem.title = "MyTitle"
从同一类内部从viewDidLoad
内部访问标题。但是,我需要从单独的类'CustomNavigation
访问标题,如下所示:
class: CustomNavigation: UIViewController() {
override func viewDidLoad(){
super.viewDidLoad()
func createCustomNav(){
self.navigationItem.title = "MyTitle"
}
}
}
不幸的是,它不起作用。我也试过这个:
func createCustomNav(){
let nav = UINavigationBar()
let title = UINavigationItem(title: "MyTitle")
nav.setItems([title], animated: false)
self.view.addSubview(nav)
}
这也行不通。我没有收到任何错误。
我在主VC中实例化CustomNavigation
:var customNavigation = CustomNavigation()
任何帮助将不胜感激!
设置描述要完成的工作的协议。
protocol NavigationTitler {
func updateTitle(with title: String)
}
定义类将如何使用协议。
class CustomNavigation: UINavigationController {
var titleDelegate: NavigationTitler?
func work() {
if let del = titleDelegate {
del.updateTitle(with: "Title from other object")
}
}
}
实现协议(这是为了您的mainVC
(。
class ViewController: UIViewController, NavigationTitler {
var customNavigation: CustomNavigation?
func updateTitle(with title: String) {
self.navigationItem.title = title
}
func buildCustomController() {
customNavigation = CustomNavigation()
customNavigation!.titleDelegate = self
}
}
从 UITabBarItem 获取标题,在当前 VC 中用作标题:
//Titel einstellen
let x = navigationController?.tabBarItem.title ?? ""
self.title = x //titel in VC