2011-01-31 5 views
6

2 개의 UINavigationController가있는 UITabBarController 설정이 있습니다.UITabBarControllers 탭을 두 번 클릭하면 네비게이션 컨트롤러의 루트로 이동합니다

하나의 UINavigationController에는 하나의 UIViewController가 있고 다른 UINavigationController에는 두 개의 UIViewController가 있습니다. 그런 다음 두 번째 UIViewController로 이동하여 이미 선택된 Tab을 클릭하면 UINavigationController (첫 번째 UIViewController가 됨)의 루트로 이동합니다.

이 문제를 방지하는 방법이 있습니까? 사용자가 이미 선택된 탭을 클릭하여 탐색 컨트롤러의 루트로 이동할 수 없도록하려고합니다.

답변

17

이렇게하려면 앱 대리인의 기능을 구현하여 Tabbar 대리자 호출을 선택해야합니다.

- (BOOL)tabBarController:(UITabBarController *)theTabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    return (theTabBarController.selectedViewController != viewController); 
} 

이 같이 호출됩니다 : 앱 delegate.m 파일에서

의 didfinishlaunching 방법으로,이 라인

[tabBarController setDelegate:self]; 

다음 (또한 앱 위임에)이 메소드를 구현 추가 탭 위임 프로토콜의 일부이며 탭이 이미 선택되어있는 경우 탭 선택을 중지합니다.

희망이 있습니다.

+0

내 TabBarController가 다른 ViewController의 일부인 경우를 제외하고는 작동합니다. 따라서 App Delegate 내에서 delegate를 설정하는 대신 적절한 ViewController 내에서 delegate를 설정합니다. 감사! – Mausimo

+1

이것을 앱 델리게이트에 넣는 대신, TabBarViewController를 서브 클래스 화하고 서브 클래스 대리자를 self.delegate = self로 설정했습니다. 그런 다음 스토리 보드에서 내 tabbarviewcontroller의 하위 클래스를 선택합니다. – nearpoint

관련 문제