2012-10-01 3 views
0

프로그래밍 방식으로 다른 탭으로 전환하고 탐색 스택의 첫 번째보기로 이동하려면 어떻게합니까?프로그래밍 방식으로 다른 탭으로 전환하고 첫 번째보기 컨트롤러로 전환 하시겠습니까?

다른 탭으로 전환 할 수 있습니다.

self.tabBarController.selectedIndex = 4; 

그러나 해당 탭의 탐색 스택에서 다른보기 컨트롤러를 전환해야합니다.

어떻게하면됩니까?

위 코드를 실행하자마자 전환되지만 탐색 스택의 현재로드 된보기 컨트롤러로 전환됩니다.

내보기 컨트롤러는 앱 대리인의 탭 표시 줄에 추가 된 5 개의 내비게이션 컨트롤러에로드됩니다.

+0

다중 네비게이션 컨트롤러를 사용하는 이유에 대해 명확하지 않다. 일반적으로 대부분의 앱은 뷰 컨트롤러가있는 하나의 탐색 컨트롤러를 원합니다. 여러 개의 nav 컨트롤러가 필요한 이유에 대해 자세히 설명해 주시겠습니까? 단일 뷰 컨트롤러는 항상 동일한 탐색 스택에 속해 있습니까, 아니면 다중 탐색 컨트롤러의 "자식"일 수 있습니까? – strings42

+0

@ strings42 여러 개의 'UINavigationController'를 사용하는 것이 완벽합니다. 그것은 실제로 많이 발생합니다. 예를 들어, 뷰 컨트롤러가있는 테이블 뷰 (뷰 컨트롤러에서)를 표시하려면 별도의 네비게이션 컨트롤러에 해당 뷰를 놓고 표시해야합니다. 그렇지 않으면 스택과 탐색 막대가 표시되지 않습니다. – DrummerB

답변

3

나는 당신이 당신의 UITabBarControllerUINavigationController의이 가정의 프로그래밍 할 때 발생하는 경우 확인)이 내가 사용하는 코드입니다. 이 경우 popToRootViewControllerAnimated:을 사용하여 첫 번째보기 컨트롤러로 이동할 수 있습니다.

int index = 4; 
self.tabBarController.selectedIndex = index; 
[self.tabBarController.viewControllers[index] popToRootViewControllerAnimated:NO]; 
0

탭 막대 컨트롤러에 대한 rootViewController가 탐색 컨트롤러라고 가정하면 해당 탭 컨트롤러에 대한 참조를 가져 와서 원하는보기 컨트롤러로 이동하십시오. 탭을 전환하기 전에이 작업을 수행 할 수도 있습니다.

편집 : UINavigationController를 서브 클래 싱하여 탭이 전환 될 때 네비게이션 컨트롤러가 rootViewController로 이동하도록 지시하는 탭 표시 줄 컨트롤러의 기본 동작을 방지하는 것을 잊었습니다 (이것은 사람이 탭을 탭 할 때의 동작입니다. .

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 
{ 
    //NSLog(@"popToRootViewControllerAnimated"); 

    return @[]; 
} 
0

알고있는 것은 오래된 것이지만 비슷한 문제에 직면했습니다. tabViewController에 3 개의 탭이 있습니다. 각 탭에는 드릴링 할 수있는 탐색 트리가 있습니다. 사용자가 탭을 전환하면 해당 탭의 rootviewcontroller가 필요합니다. 내 솔루션은 탐색 트리에서 그 뷰 컨트롤러에 다음 줄을 추가했다 :

-(void)viewWillDisappear:(BOOL)animated 
    { 
     [super viewWillDisappear:YES]; 
     DLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd)); 
     [self.tabBarController.viewControllers[self.tabBarController.selectedIndex] popToRootViewControllerAnimated:YES]; 

    } 

사용자가 위의 코드와 뷰의에 있으며 탭을 전환하는 경우, 그들은 왼쪽 탭 루트에 튀어한다 보기, 그래서 그들이 돌아올 때 모든 것이 멋지다. ...

관련 문제