2014-01-06 1 views
0

내 앱 대리인에서 다음을 구현하고 선택한 색인을 확인하려고 시도했습니다. 이 값은 새 탭이 아닌 새 탭을 클릭했을 때의 탭입니다. 어떤 탭이 선택되었는지 찾는 방법이 있습니까?tabbarcontroller에서 어떤 탭을 선택할지 결정

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
{ 
    int *i = tabBarController.selectedIndex; 
} 

답변

0

tabBarController:didSelectViewController: 대리자 메서드를 사용하려고합니다. 탭을 선택한 후에 호출됩니다.

귀하의 int *i은 실제로 int i 이상이어야합니다. NSUInteger i이어야합니다.

2

내가 잘못 아니에요 경우, 당신이 선택한 탭의 인덱스를 얻을 수 있습니다

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 
    NSUInteger selectedIndex = [tabBarController.viewControllers indexOfObject:viewController]; 
    // ... 
    return YES or NO; 
} 
+0

문제는 코드 전에 호출 잘못된 위임 방법에이다 탭이 실제로 변경됩니다. – rmaddy

+0

@rmaddy : 당신이 맞을지도 모르지만, 새 탭이 선택되어야 하는지를 결정하고 싶다면'shouldSelectViewController'가 보통 구현됩니다. 'didSelectViewController'에서, 너무 늦었습니다. –

+0

OP가 새로운 색인을 원합니다. 새로 선택된 VC의 색인을 확인하는 코드는 그 대답을 줄 것입니다. 그러나 사용자가 사실 이후에 새로운 색인을 알고 싶다면 내 대답은보다 직접적인 것처럼 보입니다. 선택을 검증 할 필요가 있다면, 물론 당신의 대답이 더 낳습니다. – rmaddy

0

스위프트 버전 :

func tabBarController(tabBarController: UITabBarController, shouldSelectViewController viewController: UIViewController) -> Bool { 
    var shouldSelect = true 
    if let viewControllers = tabBarController.viewControllers where viewControllers.indexOf(viewController) == lastIndex { 
     shouldSelect = false 
    } 
    return shouldSelect 
}