ios - 对 navigationItem 的更改延迟显示
问题描述
在更改嵌入在 a中的 anavigationItem
内部的属性时,我面临延迟。ViewController
NavigationController
考虑 XCode 提供的 Master-Detail-App 示例:它包含 aMasterViewController
和 a 的 segue DetailViewController
。我现在正在尝试viewDidLoad
在 DetailViewController 的方法中自定义导航栏。
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
解决方案
添加code
到viewWillApear
而不是viewDidLoad
override func viewWillApear() {
super.viewWillApear()
navigationItem.rightBarButtonItem = editButtonItem
}
推荐阅读
- tensorflow - 坚持使用 reddit 数据集从头开始构建客户支持聊天机器人
- azure-cognitive-services - Docker 容器中的 CustomVision 分类:无法提供形状的值
- javascript - 为什么 req.route 显示以前的路线
- python - ElementTree 似乎没有在树中获取一些文本/元素
- hadoop - 减少 Hive 查询执行时间的方法
- javascript - 使用 Ajax 更新 SPARQL
- scala - Spark从资源文件夹中加载jar中的csv文件
- docker - docker:如何获取容器内的代码
- json - 使用 JavaScript 遍历 JSON
- javascript - 简单的搜索栏,显示