2014-07-15 2 views
2

탭 모음 기반 응용 프로그램 (iOS 7.1 SDK)이 있습니다. 사용자가 처음 앱을 시작할 때 로그인 화면을 보여주고 싶습니다. View Controller Containment (Tab Bar Controller의 첫 번째보기 컨트롤러에서 호출 됨)를 사용하기로 결정했습니다.UITabBarController에 하위보기를 추가해도 viewWillAppear가 호출되지 않습니다.

LoginViewController *vc = [LoginViewController new]; 
[self.tabBarController addChildViewController:vc]; 
[vc didMoveToParentViewController:self.tabBarController]; 
[self.tabBarController.view addSubview:vc.view]; 

그러나 몇 가지 문제가 있습니다. 보기는 일반적으로 보이지만, LoginViewController viewWillAppear 및 viewDidAppear는 절대로 호출되지 않습니다. 모든 뷰 라이프 사이클 메소드 (viewDidLoad, viewWillAppear, viewDidAppear)에서이 코드를 사용하려고 시도했지만 운이 없었습니다. 내가하려는 일을 성취 할 수있는 다른 방법이 있다는 것을 알고 있습니다. 예를 들어 탭 컨트롤러의 첫 번째보기 컨트롤러에 자식 컨트롤러를 추가하고 tabbar를 숨 깁니다.이 기능은 잘 작동하며 viewWillAppear 및 viewDidAppear가 정상적으로 호출됩니다. 하지만이 때문에 나는 더 궁금해합니다 - 왜 탭 컨트롤러에 자식보기 컨트롤러를 추가하는 것이 예상대로 작동하지 않습니까?

+0

메소드를 호출하려면 뷰 컨트롤러를 표시하거나 밀어야합니다. 보기를 하위보기로 추가하는 것은 작동하지 않습니다. – ZeMoon

답변

0

메소드가 호출 되려면 viewcontroller를 표시하거나 밀어야합니다. 보기를 하위보기로 추가하는 것은 작동하지 않습니다.

귀하의 경우에는 viewWillAppear, viewDidAppear 메서드를 명시 적으로 호출 할 수 있습니다.

LoginViewController *vc = [LoginViewController new]; 
[self.tabBarController addChildViewController:vc]; 
[vc didMoveToParentViewController:self.tabBarController]; 
[self.tabBarController.view addSubview:vc.view]; 

[vc viewWillAppear]; 
[vc viewDidAppear]; 
+1

답변 해 주셔서 감사합니다. 그러나 나는이 메소드를 명시 적으로 호출하는 것이 좋은 해결책이 아니라고 생각합니다. 뷰 컨트롤러 포함이 사용되면 자동으로 호출되어야합니다. 내가 말했듯이, 탭 컨트롤러의보기 컨트롤러 중 하나 인 일반보기 컨트롤러에서 코드를 사용하면 모든 것이 예상대로 작동합니다. 하위보기 컨트롤러를 탭 막대 컨트롤러에 직접 추가하려고 할 때만 문제가 있습니다. – lukasMT

+0

viewController의 뷰를 다른 뷰에 직접 추가하는 것도 좋은 구현이 아닙니다. 그러한 시스템을 사용할 때 이와 같은 임시 해결책을 사용해야합니다. 자신이 호출 한 메서드를 원한다면 올바르게 전달해야합니다. – ZeMoon

-2

작동 중!

dispatch_async(dispatch_get_main_queue(), ^{ 
     [self.tabBarController setSelectedIndex:0]; 
     [self.tabBarController setSelectedIndex:1]; 
     [self.tabBarController setSelectedIndex:0]; 
    }); 
관련 문제