2016-08-30 1 views
0

UINavigationController를 모달로 표시 한 다음 애니메이션없이 일부 UIViewcontroller를 푸시하면 마침내 표시된 navigationItem.title이 예상했던 것과 다릅니다. iOS의 UINavigationController 제목이 손상된 것 같습니다.

나는 아래로 내 문제를 좁히기 위해 노력하고 문제를 복제 할 다음과 같은 간단한 코드를 함께했다 : 그 코드를 표시 제목을 실행하는 경우

self.window.rootViewController = [[DummyRootVC alloc] init]; 

: AppDelegate에에서

@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 

내가 설정을 "Dummy 2"이고 뒤로 버튼의 이름은 "Dummy 4"입니다. 실제로 "Dummy 4"라는 제목과 "Dummy 3"이라는 뒤로 버튼을 기대합니다.

올바른의 ViewController 스택 및 예상대로 로그를 보여줍니다 backgroundColor로 (예상대로) 녹색 (흥미롭게도 여전히 하나의 "뒤로"를 클릭 한 후 녹색) :

VC 스택 : 제목 : DUMMY1

VC 스택 : 제목 : DUMMY2

VC 스택 : 제목 : DUMMY3

VC 스택 : 제목 : DUMMY4

는 네비게이션 컨트롤러 모달 제시와 함께 비 애니메이션 설정에 다소 관련 보이기 때문에 나는 그 문제를 해결 할 수 있지만 내가 근본적인 문제를 이해하고 싶습니다 ...

수 누군가가 나에게 약간의 통찰력을 제공합니까? 이 버그가 있습니까? 아니면 내가 용의자로서 잘못하고있는 것입니까?

감사합니다. D

당신은 중단 점을 설정하고 Tj3n @ 첫번째
+0

과 : – Tj3n

+0

호출되는 라인 참조 내가 한 수 – McMini

+1

'viewDidLoad'에서 push/present를 호출하는 것은 결코 좋은 생각이 아니므로 많은 이상한 동작이 발생했기 때문에'viewWillAppea' 또는'viewDidAppear'에서 호출하는 것이 좋습니다. 이유는 무엇입니까? – Tj3n

답변

1

viewWillAppear 또는 viewDidAppear 그래서의 ViewController가 init을 할 수는 서브 뷰는 문제를 방지하기 위해 올바르게의에 viewDidLoad에서 존재하는 푸시/넣어 호출되는 메소드의 순서는 예상대로입니다.
관련 문제