当我阅读UINavigationController的api文档时,属性navigationItem有一个提示:
避免在导航项目中创建条形按钮项目以创建视图控制器的视图
我不明白这是什么意思,任何人都可以详细解释这个
答案 0 :(得分:0)
这可能是最近添加到文档中的,因为我今天第一次偶然发现了这个问题。此外,在我看到的几乎每个示例代码中,条形按钮的初始化都发生在viewDidLoad方法中 - 根据引用的语句,这显然不是最好的地方。
Apple告诉我们的是,当viewDidLoad方法尚未执行或根本没有执行时,可能会出现请求navigationItem内容的情况。 当您一次推送多个viewcontroller时会发生这种情况。例如。使用 setViewControllers:animated:界面或通过这样做:
ViewController1 *firstViewController = [[ViewController1 alloc] init];
ViewController2 *secondViewController = [[ViewController2 alloc] init];
[navigationController pushViewController:firstViewController animated:YES];
[navigationController pushViewController:secondViewController animated:YES];
在这种情况下, firstViewController 的viewDidLoad方法将不会被调用,直到用户导航回它。如果您在 firstViewController 中设置了 title 属性,那么您可能希望后退按钮标有您在 firstViewController 中设置的标题。但是后退按钮将被称为“后退”,因为当UINavigationController请求时, firstViewController 的title属性为nil。
结论是:将条形按钮项的创建与视图的创建联系起来适用于大多数情况。不过请记住,您可以在创建视图之前或之后需要导航项信息。在这种情况下,请考虑在viewcontrollers init 方法中初始化 navigationItem 属性。