첫째, 탭 막대는 Apple 문서에 명시된대로 루트 수준에 있어야합니다. 즉, 창에 추가되어야합니다. 이것은 올바른 행동의 핵심입니다.
둘째, / 를 사용 하여 수동으로 알림을 전달할 수 있지만 전체 뷰 호출 계층이 올바르게 작동하도록하려면 수동으로 호출하면됩니다.UITabBarDelegate
UINavigationBarDelegate
[tabBarController viewWillAppear:NO];
[tabBarController viewDidAppear:NO];
과
[navBarController viewWillAppear:NO];
[navBarController viewDidAppear:NO];
.. 해당 컨트롤러에서 뷰 컨트롤러를 설정하기 전에 한 번만 수행합니다 (할당 직후). 그때부터 자식 뷰 컨트롤러에서 이러한 메서드를 올바르게 호출했습니다.
내 계층 구조는 다음과 같습니다.
window
UITabBarController (subclass of)
UIViewController (subclass of) // <-- manually calls [navController viewWill/DidAppear
UINavigationController (subclass of)
UIViewController (subclass of) // <-- still receives viewWill/Did..etc all the way down from a tab switch at the top of the chain without needing to use ANY delegate methods
탭 / 내비게이션 컨트롤러에서 언급 된 메서드를 처음 호출하기 만하면 모든 이벤트가 올바르게 전달되었는지 확인할 수 있습니다. UINavigationBarDelegate
/ UITabBarControllerDelegate
메소드 에서 수동으로 호출 할 필요가 없었습니다 .
사이드 노트 : 이상하게도 작동하지 않았을 때 사적인 방법
- (void)transitionFromViewController:(UIViewController*)aFromViewController toViewController:(UIViewController*)aToViewController
.. 작동하는 구현에 대한 호출 스택에서 볼 수 있으며 일반적으로 viewWill/Did..
메서드를 호출 하지만 위의 작업을 수행 할 때까지 호출 되지 않았습니다.
나는 그것이 UITabBarController
창 수준에 있고 문서가 이것을 백업 하는 것이 매우 중요하다고 생각합니다 .
더 많은 질문에 답해 드리겠습니다.