更改navigationItem
中嵌入的ViewController
内部的NavigationController
的属性时,我面临着延迟。
请考虑XCode提供的示例Master-Detail-App:它包含一个MasterViewController
和一个DetailViewController
的序列。我现在尝试自定义DetailViewController的viewDidLoad
方法内的导航栏。
class DetailViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
//delay if the button (or any other property) is set here
navigationItem.rightBarButtonItem = editButtonItem
}
}
将显示对导航栏的更改,但会有明显的延迟。但是,如果在MasterViewController
内对导航栏进行了更改,则一切工作都会非常顺畅:
class MasterViewController: UIViewController {
...
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
let controller = (segue.destination as! UINavigationController).topViewController as! DetailViewController
//no delay if the button would instead be set here
//navigationItem.rightBarButtonItem = editButtonItem
}
}
}
在我看来,从navigationBar
内修改MasterViewController
的项目不是一个好的做法。特别是因为
title
和buttons
之类的项目在很大程度上取决于DetailViewController
。
现在,最优选的方式是立即更改navigationItem
并考虑到关注点分离的情况?
答案 0 :(得分:0)
将code
添加到viewDidApear
而不是viewDidLoad
override func viewDidAppear() {
super.viewDidAppear()
navigationItem.rightBarButtonItem = editButtonItem
}