2009-06-23 3 views
6

방금 ​​발견 된 사항 : NavigationController (스택에 일부보기가 있음)와 결합 된 Tabbar가 있고 TabBarItem을 두 번 클릭하면보기가 첫 번째 ViewController로 팝됩니다. 너는 맘에 든다.iPhone UITabbar 항목 더블 클릭 팝 컨트롤러

이 문제를 방지 할 방법이 있습니까?

답변

0

내가 지금까지 찾은 유일한 방법은 UINavigationController의 하위 클래스를 만들고 nil을 반환하는 popToRootViewControllerAnimated 메서드를 덮어 쓰는 것입니다.

이것은 두 번 탭하면 UITabBar에서 호출하는 방법 인 것 같습니다. 그것이 비록 올바른 방법 ...이 문제에 대한 몇 가지 의견을 싶어요 인 경우에 나는

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated { 
    return nil; 
} 
1

난 그냥이 문제로 자신을 실행하고 그것을 할 수있는 방법을 발견 ... 모르겠어요. 당신의 UITabBarController가에 대한 대리자를 확인하고 동일한 컨트롤러를 선택 방지하기 위해 tabBarController:shouldSelectViewController:을 구현 : 당신은 어떤 경우를 방지하려는 경우 당신은 또한 더 복잡한 로직을 추가 할 수 있습니다

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

.

5

아마도이 동작을 방지해서는 안됩니다. 상태 표시 줄을 탭하여 스크롤보기의 맨 위로 스크롤하는 것과 같은 표준 iPhone UI 규칙입니다.

정말로하고 싶다면 mckeed와 마찬가지로 UITabBarController 대리자 메서드 -tabBarController:shouldSelectViewController:을 구현해야합니다. 그러나 다섯 개 이상의 탭이있는 경우 selectedViewController은 "추가"섹션에있는보기 컨트롤러 일 수 있지만 vc[UITabBarController moreNavigationController]이됩니다. 다음은이 경우 처리하는 구현의 :

- (BOOL)tabBarController:(UITabBarController *)tbc shouldSelectViewController:(UIViewController *)vc { 
    UIViewController *selected = [tbc selectedViewController]; 
    if ([selected isEqual:vc]) { 
     return NO; 
    } 

    if ([vc isEqual:[tbc moreNavigationController]] && 
     [[tbc viewControllers] indexOfObject:selected] > 3) { 
     return NO; 
    } 

    return YES; 
} 
+1

나는 또한 아주 좋은 이유없이이 동작을 방지하지 않는 것이 좋습니다. 시스템 전체 바로 가기를 사용할 수없는 경우 사용자가 열 받게됩니다. –

0

나는 행동을 의도 한대로-이 유지에 동의는하지만, 동시에 일들이 VC 정상적으로 스택 풀기에 흥미있어 (예 : 코어 데이터의 중첩 시리즈를 편집 할 때와 같은 사물). 필자의 경우 각 VC를 취소하는 것이 중요합니다.

따라서 우리가 루트 VC까지 계속 뛰어 드는 것을 알 수있는 방법이 있습니까? viewWillDisappear 동안 취소/롤백 op 생각하지 않아 그것을 잘라 내기 때문에 동일한보기 때문에 물론 저장 후 사라질 것입니다. 나는 어떻게 든 방송 할 필요가있다 "우리는 취소 중이다 - 구제 금융!" 주어진 탭에서 루트 VC로 끝날 때. viewWillDisappear 내에서 더티/새 플래그를 세이프티 체크로 확인하는 것은 합법적 인 취소 (즉, 취소 버튼이 실제로 탭된 경우)에서 두 번 호출되기 때문에 도움이되지 않습니다.

+0

Ah-ha. 처음에는 카테고리가 당신의 친구라고 생각했고 아마도 UIViewController에 장비를 설치하고 popToRootViewControllerAnimated에 개입하여 군대에 경고했습니다. 하지만 서브 클래 싱이 필요하다. (가능할 때마다 코코아에서 서브 클래 싱을 피하려고 노력하지만 가능할 수있는 시대는 아닙니다.) 엔트로피가 적은 방법이 있다면, 나는 모든 귀입니다. –