2014-03-29 11 views
0

UITabBarController에 6 개의 탭이있는 애플리케이션이 있습니다. 또한iOS : 탭의 위치를 ​​편집 한 후 특정 탭으로 이동

self.tabBarController.selectedIndex = 2; 

가 다른 탭 (Profile Tab)로 이동 한 다음 코드를 가진 IBAction 있습니다. More 탭으로 이동하고 내 탭의 위치를 ​​바꿀 때를 제외하고는 완벽하게 작동합니다. 그런 다음 IBAction은 나를 Profile Tab으로 보내지 않고 다른 탭이 될 수있는 두 번째 탭으로 보냅니다.

IBAction을 사용하여 탭 순서를 사용하지 않고 특정 탭으로 이동하려면 어떻게해야합니까?

답변

1

탭 컨트롤러가 관리하는보기 컨트롤러의 용도와 그 용도에 대한 매핑을 유지 관리해야합니다. 각 탭에 다른 클래스의보기 컨트롤러가있는 경우이를 사용하여 검색 할 수 있습니다 (하지만 이상적은 아닙니다 ...).

더 나은 옵션은 키가 탭/뷰 식별자 (상수로 정의되어야 함)이고 값이 해당 식별자와 연결된 (보기 및 탭 컨트롤러로 관리되는) 뷰 컨트롤러 인 사전을 유지하는 것입니다.

당신이 self.tabBarController.selectedIndex = 2;를 사용하지 않는 탭을 전환 할 때 지금, 당신이 사용

UIViewController *controller = self.config[XXXX]; 
self.tabBarController.selectedViewController = controller; 

(XXXX 상수 식별자이며 config가 매핑 사전입니다)

0

UITabBarController가가가 이 특정 상황에서 구출 할 수있는 selectedViewController. 내가 잘못 본 것이 아니라면 UITabbarController의 자식으로 다른보기 컨트롤러가 포함 된 UINavigationController가 있습니다. 그렇다면 UINavigationController의 selectedViewController 속성을 특정 UINavigationController에 할당 할 수 있습니다. 제공되는 ivars 또는 속성은 해당 UINavigationController를 참조해야합니다. 이렇게하면 탭 인덱스에 구속되지 않습니다.

UINavigationController *moreNavigationController = [UINavigationController alloc] …]; 
self.tabBarController.selectedViewController = moreNavigationController;