當我以模態方式呈現UINavigationController,然後將一些UIViewcontrollers(無動畫)推到它上時,最終顯示的navigationItem.title與我所期望的不同。iOS中的UINavigationController標題似乎已損壞
我試圖縮小我的問題來,想出了下面的短代碼複製的問題:
@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];
當運行代碼顯示的標題是「虛擬2」,後退按鈕被命名爲「虛擬4」,而我實際上會期望一個標題「虛擬4」和一個名爲「虛擬3」的後退按鈕。
日誌顯示如預期的正確視圖控制器,堆棧和backgroundColor時(如預期),綠色(和有趣之後仍然是一個「回」點擊綠色):
VC堆棧:標題:DUMMY1
VC堆棧:標題:DUMMY2
VC堆棧:標題:DUMMY3
VC堆棧:標題:DUMMY4
末
我能解決這個問題,因爲它似乎有點關係與呈現導航控制器模態組合的非動畫設置,但我想了解底層問題...
燦任何人都能爲我提供一些見解?這是一些錯誤還是我正在做(正如我懷疑)只是錯誤的方式?
謝謝!
您可以設置斷點,看看哪些線被稱爲第一 – Tj3n
@ Tj3n我沒有和被調用方法的順序與預期一致。 – McMini
只是在我的實踐中,在viewDidLoad中調用push/present ...從來不是一個好主意,發生了很多奇怪的行爲,所以我建議在'viewWillAppea'或'viewDidAppear'中調用它,爲什麼然後我不知道 – Tj3n