2011-03-20 4 views
5

UITabBar의 "더보기"에서 사용자 선택을 관리하려면 어떻게해야합니까? 나는 UITabBarItems 선택을 관리하려면이 코드가 있습니다UITabbar의 "더보기"에서 선택된 색인

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {  
    if (!(viewController == tabBarController.moreNavigationController)) { 
     int index = tabBarController.selectedIndex; 
     [[DataManager sharedInstance] setCurrentTabbarIndex:index]; 
    } 
} 

그것은 눈에 보이는 UITabBarItems 잘 동작을하지만, 사용자가 "더"보기에서 일부 항목을 선택하면 그에 대한 정보를 얻을 수 없다. "더보기"의 사용자 항목 선택을 파악할 수있는 방법이 있습니까? 감사!

답변

2

UITabBarController의 "more"뷰는 다른 뷰와 별도로 처리됩니다.

[MoreNavigationController '] 속성에는 More 버튼이 화면에 표시되지 않더라도 항상 유효한 더 많은 탐색 컨트롤러가 포함되어 있습니다. 이 속성의 값을 사용하여 탭 표시 줄 인터페이스에서 추가 탐색 컨트롤러를 선택하거나 현재 선택된보기 컨트롤러과 비교할 수 있습니다.

이 속성에 저장된 개체를 탭 표시 줄 인터페이스에 수동으로 추가하지 마십시오. 추가 컨트롤러는 필요에 따라 탭 막대 컨트롤러에 의해 자동으로 표시됩니다. 또한 viewControllers 속성에 저장된 View Controller 배열에서 More 네비게이션 컨트롤러를 찾지 않아야합니다. 탭 막대 컨트롤러는 해당 객체 배열에 추가 탐색 컨트롤러를 포함하지 않습니다. 난 당신이 같은 것을 할 수 있다고 생각하는 것으로 판단

: viewWillAppear:animated:

당신의 탭 표시 줄에 의해 제어됩니다 모든보기에이를 제공 받게됩니다 선택되고 무엇이든보기

int index = tabBarController.selectedIndex; 
if (tabBarController.selectedViewController == 
    tabBarController.moreNavigationController) { 
    index = -1; //assign some placeholder index for the "More" controller 
} 
+0

더 많은 뷰 컨트롤러는 jQuery과를 가지고, 나는 셀의 일부가 터치 할 때 몇 가지 코드를 실행해야합니다. 다른 말로하면 "더 많은 뷰 컨트롤러"가있는 UITableView에 대한 "didSelectRowAtIndexPath"메서드를 관리해야합니다. 그렇게 할 방법이 있는지 모르십니까? – Sebastian

+0

아, 직접 할 수 있는지 모르겠습니다. 아마도 UITabBarController를 서브 클래스 화하고 행 선택을 처리 할 수있는 사용자 정의 "더"보기 컨트롤러를 사용하는 구현을 제공 할 수 있습니다. 아니면 더 간단한 옵션은'[[DataManager sharedInstance] setCurrentTabbarIndex : index];'호출을 View Controller의'viewWillAppear' 메소드로 옮기는 것입니다. – aroth

+0

나는 많은 검색을했고 아직 해결책이 없다. 나는 이동할 수 없다 [[DataManager sharedInstance] setCurrentTabbarIndex : index]; UITabBar에서 선택한 항목과의 관계로보기를 구성해야하므로 viewDidLoad로 이동해야합니다. 어쨌든, 나는 다른 해결책으로 생각할 것이다. 감사!! – Sebastian

0

을, 따라서 "더"컨트롤러에서 만든 경우에도 사용자 선택의 신원을 추출 할 수 있습니다.

이 방법으로 바로 탭 표시 줄 상태를 저장하거나 탭 표시 줄에 다시 참조로보기를 제공하고 에게 알릴 수 있습니다.

2

매우 오래된 질문에 대한 답변이 늦었지만, 어쨌든 누군가가이 문제에 직면하게됩니다.

해결책은 "더 많은"내비게이션 컨트롤러의 델리게이트로 자신을 지정하는 것입니다. 당신은 이미 UITabBarControllerDelegate 프로토콜을 채택하는 클래스를 가지고, 그래서 .H 파일은 다음과 같습니다

당신이 대리인으로 클래스를 할당하는 곳마다
@interface MyDelegate : NSObject <UITabBarControllerDelegate, UINavigationControllerDelegate> 
{ 
} 

가이 수행

- (void) assignDelegate:(MyDelegate)myDelegate toTabBarController:(UITabBarController*)tabBarController 
{ 
    tabBarController.delegate = myDelegate; 
    tabBarController.moreNavigationController.delegate = myDelegate; 
} 

마지막을, 위임 클래스에서이 메서드를 추가하십시오.

- (void) navigationController:(UINavigationController*)navigationController didShowViewController:(UIViewController*)viewController animated:(BOOL)animated 
{ 
    // add code to handle the event 
} 

프로그래밍 방식으로 탭을 변경할 때 위임 메서드가 호출되지 않습니다.

1

이 문제에 대해 가장 잘 알고있는 방법은 UITabBarController.moreViewController의 topViewController 인 UITableView의 대리자가되는 것입니다. didSelectRowAtIndexPath를 구현하면 문제가 해결됩니다!

이를위한 가장 좋은 (가장 안전한) 구현

가 자신의 블로그에 스튜어트 샤프에 의해 설명되어 http://initwithstyle.net/2014/02/making-more-of-the-more-view/