2011-03-09 3 views
5

누군가가보기 컨트롤러가있는 tabbar 인덱스를 어떻게 결정할 수 있는지 말해 줄 수 있습니까?내보기 컨트롤러가 어떤 tabbar 인덱스를 결정하는 방법

간단하게 - 인덱스를 하드 코딩하여 현재 tabBarItem으로 이동할 수 있습니다.

self.tabBarController.selectedIndex = 3; 

그러나, 사용자가 탭 표시 줄의 항목을 정의한다, 3 번에서 가능성의 ViewController가 이동 한 것처럼 사용자가 원하는 것 하나 없다이다. 올바른 위치를 선택할 수 있도록 이동 한 위치를 어떻게 결정할 수 있습니까?

도움주세요.

감사합니다,

답변

0

좋아, 그래서 나는 성공적으로 답변 중 어느 하나와 운이 없었다 - 종류는 그렇게 생각하지만 난 한 I 어떻게 내가 그 일을했는지 ​​설명해 주겠다고 말했다.

(또한 IB 수행 할 수 있습니다)

하는 tabBarController 등을 위해 반드시 대리인이 모든 설정되어 있는지 확인하고 다음을 inplement 0으로 시작 8. 종료 말에 태그를 할당 내 탭 표시 줄 컨트롤러에 각 tabBarItem 위임 방법 :

- (void)tabBarController:(UITabBarController *)theTabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed { 

NSInteger count = self.tabBarController.viewControllers.count; 
NSMutableArray *tabOrderArray = [[NSMutableArray alloc] initWithCapacity:count]; 


for (UINavigationController *viewController in viewControllers) 
{ 
    NSInteger tag = viewController.tabBarItem.tag; 
    [tabOrderArray addObject:[NSNumber numberWithInteger:tag]]; 
} 

[prefs setObject:tabOrderArray forKey:@"tabOrder"]; 
[prefs synchronize]; // optional 
[tabOrderArray release]; 

}

(내가 루프 따라서 그 내 응용 프로그램에서 ViewControllers의 ontop을 navControllers를 사용주의)

그래서 지금 내가 원하는 VC의 인덱스를 얻을 수있는 탭 표시 줄 순서가 있다면 새 탭 표시 줄 순서

NSArray * tabBarOrder = [prefs objectForKey:@"tabOrder"]; 


if(tabBarOrder) { ... } 

와의 환경 설정에서 배열이 있다면 내가 단순히 확인을했다 할 수 있었는지 with '[tabBarOrder indexOfObjectIdenticalTo : [NSNumber numberWithInt : theViewsTagImAfter]];

그리고 배열에 배열이 없다면 이동하지 않았다고 가정 할 수 있습니다.

**

중 하나가 내가이 당신이 세련된 방법으로이 작업을 수행 할 수 있었다 느껴야했던 방법을 파괴 주시기 바랍니다. 그러나,이 작품과 다른 제안을하지 않았다.

15

self.tabBarController.selectedViewController 속성을 사용합니다.

UPDATE는 :

NSUInteger index = [self.tabBarController.viewControllers indexOfObjectIdenticalTo:specificViewController]; 
+0

오해하지 않거나 내 질문에 오해의 소지가 있습니다 - 현재 색인을 찾고있는 중입니다. 특정보기 컨트롤러로 점프하고있는 것을보고있는 중입니다 (현재) 어떤 색인인지 모르겠습니다. 그것은 변경되어야합니다. 더 명확하게? 고마워요 & 미안 해요. – theiOSDude

+0

'selectedViewController' 속성은 인덱스가 아니라 UIViewController 인스턴스를 반환합니다. 어쩌면 나는 아직도 당신이 찾고있는 것을 이해하지 못한다 ... –

+0

죄송합니다, 맞습니다 - 당신이 제안한 것은 멋지다, 그것은 viewController를 선택할 수있게 해준다. 그러나 sorted하지만, 나는 해당 tabBarItem을 선택할 필요가있다 - 그러므로, 색인 .. – theiOSDude

1

당신은의 UITabBar에서 컨트롤러의 목록을 포인터 값으로 비교할 수 있습니다 사용, 특정의 ViewController의 인덱스를 얻으려면. 예를 들어,의 UITabBar에있는 뷰 컨트롤러는이 같은 위치에 알아낼 수 :

int loc = 0; 
for (UIViewController *vc in [self.tabBarController viewControllers]){ 
    if (vc == self.navigationController || vc == self){ 
     break; 
    } 
    loc++; 
} 
if (loc == [[self.tabBarController viewControllers] count]) 
    NSLog(@"Could not find me!"); 
else 
    NSLog(@"Im in tab:% d",loc); 
관련 문제