当我以模态方式呈现UINavigationController然后推送(没有动画)一些UIView控制器时,最终显示的navigationItem.title与我期望的不同。
我试图缩小我的问题,并提出以下简短代码来复制问题:
@implementation DummyRootVC
- (void) viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
UINavigationController* nc = [[UINavigationController alloc] initWithRootViewController:[[Dummy1VC alloc] init]];
[self presentViewController:nc
animated:false
completion:nil];
}
@end
@implementation Dummy1VC
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor whiteColor];
self.navigationItem.title= @"DUMMY1";
[self.navigationController pushViewController:[[Dummy2VC alloc] init]
animated:false];
}
@end
@implementation Dummy2VC
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title= @"DUMMY2";
self.view.backgroundColor=[UIColor yellowColor];
[self.navigationController pushViewController:[[Dummy3VC alloc] init]
animated:false];
}
@end
@implementation Dummy3VC
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor orangeColor];
self.navigationItem.title= @"DUMMY3";
[self.navigationController pushViewController:[[Dummy4VC alloc] init]
animated:false];
}
@end
@implementation Dummy4VC
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title= @"DUMMY4";
self.view.backgroundColor=[UIColor greenColor];
for (UIViewController* vc in self.navigationController.viewControllers) {
NSLog(@"VC Stack: %@ Title:%@",vc,vc.navigationItem.title);
}
NSLog(@"End");
}
@end
在AppDelegate中我设置了:
self.window.rootViewController = [[DummyRootVC alloc] init];
当运行该代码时,显示的标题是“Dummy 2”,后退按钮被命名为“Dummy 4”,而我实际上会期望标题为“Dummy 4”和一个名为“Dummy 3”的后退按钮。 / p>
日志按预期显示正确的ViewController-Stack和backgroundColor(正如预期的那样)为绿色(有趣的是在一次“后退”点击后仍为绿色):
VC Stack:标题:DUMMY1
VC Stack:标题:DUMMY2
VC Stack:标题:DUMMY3
VC Stack:标题:DUMMY4
结束
我可以解决这个问题,因为它似乎与非动画设置有点相关,并且模拟地呈现了导航控制器,但我想了解潜在的问题......
有人能为我提供一些见解吗?这是一些错误还是我正在做(我怀疑)只是错误的方式?
谢谢!
答案 0 :(得分:1)
将推送/存在从segment.sort(Comparator.comparingInt(el -> el[0]).thenComparingInt(el -> el[1]));
放到viewDidLoad
或viewWillAppear
,以便viewController可以正确初始化它的子视图以避免问题:D