2012-02-23 4 views
0

몇 개의 탭 막대 버튼이있는 MainViewController 탭 막대가 있습니다. 첫 번째 탭 번호는 View 1이며 최대 3 또는 4 개의 자식 스택이있는 탐색 컨트롤러입니다. 마지막 탭 막대 버튼은 SettingsViewController이며, 그 안에 'Logout'과 유사한 기능이 있습니다.이 기능은 MainViewController을 제거하고 다시 로그인 페이지로 보내는 AppDelegate의 메소드를 호출합니다. 내가 AppDelegate에이 View 1를 (I 짓을했는지 어떤)로 선택한 탭을 설정할 SettingsViewController에 로그 아웃 버튼, View 1 다시 (또한 완료) 로그온보기로뿐만 아니라 popToRootViewController를 사용자에게 보낼 누르면탭 막대에서 내비게이션 컨트롤러 터 내기

는 는이다

조금은 고군분투하고 있습니다.

tabBar의 viewControllers 속성을 사용하여 인덱스 0에서 뷰 컨트롤러에 대한 참조를 얻으려고했지만 올바르게 구현하지 않으면 올바른 방법이 아닌 것으로 보입니다.

내 가장 최근의 시도 :

// Fine 
mainViewcontroller.tabBarController.selectedIndex = 0; 

// Not so fine 
NSArray *allViewControllers = [mainViewcontroller.tabBarController viewControllers]; 
View1 *vc = [allViewControllers objectAtIndex:0]; 
[vc.navigationController popToRootViewControllerAnimated:NO]; 

탭에서 방금 모든 뷰 컨트롤러를 통해 반복과 동일하게 작동하지 않는 루트에 터지는에서 또 다른 시도 :

for (UIViewController *viewController in mainViewcontroller.tabBarController.viewControllers) 
{ 
    [viewController.navigationController popToRootViewControllerAnimated:NO]; 
} 

수 누구 도움?

+0

보기 1에 UINavigationController가 있습니까? – bontoJR

+0

내가보기에 추가보기 컨트롤러를 밀어 넣는 것은 무엇입니까? 로그 아웃 할 때 해당 탐색 컨트롤러를 처음으로 다시 표시해야합니다. – Greg

+0

정확히 구현하는 방법은 무엇입니까? 특정보기 컨트롤러 클래스에 연결 한 viewController를 캐스팅하려고 시도 했습니까? –

답변

0

클로저 용으로 ... 정확히 동일한 코드를 사용하여 IB에서 프로그래밍 대신 탭 바 컨트롤러를 다시 만들 때 내 질문에 붙여 넣기했습니다.

0

메모리에서 일시적으로 제거되었을 수 있으므로 다시 표시하려는보기 컨트롤러가 존재하지 않을 수도 있다고 생각 했습니까? 메모리가 부족한 경우 탭이 보이지 않는보기 컨트롤러를 시스템에서 메모리에서 제거 할 수 있습니다.

이것을 극복하기 위해 selectedIndex를 설정할 때 현재 방법을 중단해야합니다. 그러나 이전에 앱이 루트 즉 Bool shouldPopBackToRoot = true로 다시 팝업되어야한다고 알리는 플래그를 설정했습니다.

그런 다음 viewController의 viewDidAppear에서이 플래그를 확인하여 popBackToRoot가 필요한지 확인하고 viewController의 viewDidAppear에서 popToRootViewController를 수행합니다 (그리고 shouldPopBackToRoot를 다시 false로 재설정하는 것을 잊지 마십시오).

관련 문제