2012-07-12 2 views
0

UITabViewControllerUINavigationController으로 실행됩니다. 각 탭에서 내 응용 트리의 뿌리 인 다른 TableView이 있습니다. 나는 테이블의 항목을 클릭 내 탭을 기본보기로 재설정하려면 어떻게해야합니까?

은 여전히 ​​화면에 TabBarNavigationBar을 가진 다른보기 다음 단계 자세한 TableView,로 이동합니다. 그것은 한 가지를 제외하고는 완벽하게 작동합니다. 한 탭에서 세부 정보를보고 다른 탭으로 전환 한 다음 다시 돌아 가면 내 세부 정보가 계속 표시됩니다. 내가 성취하고자하는 것은 그것을 떠난 후에 탭을 재설정하는 것입니다.

나는 viewDidUnload 또는 simmilar에 뭔가를 넣어야한다고 생각하지만 적절한 해결책을 찾을 수 없습니다.

희망 하시겠습니까?

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 

에서

답변

4

는 수행 탭이 선택 될 때마다 루트 뷰 탭의 뷰 컨트롤러를 탐색합니다

[viewController.navigationController popToRootViewControllerAnimated:YES]; 

.

응용 프로그램 위임에서 주 창보기 컨트롤러 (탭 표시 줄 컨트롤러) 인스턴스를 유지해도 괜찮습니다. 다음 앱에 다음 메서드를 추가, 응용 프로그램 위임에

myTabBarController = [UITabBarController alloc ... 
myTabBarController.delegate = self; // the app delegate will be also the tab bar delegate 

:

은 무엇을 추가해야하는 것은이 같은 탭 표시 줄 컨트롤러의 대표로 위임 또는 어떤 다른 초기화 클래스를 설정하는 것입니다 위임 :

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController{ 
    [viewController.navigationController popToRootViewControllerAnimated:YES]; 
} 

탭 바 컨트롤러는 탭을 선택입니다 때마다이 메소드를 호출합니다. 컴파일러를하게됩니다

@interface PSAppDelegate : UIResponder <UITabBarControllerDelegate> 

앱 위양이 나 프로토콜에 선언 된 메소드를 가질 수 있어야하고 또한 당신에게 매우 편리한 자동 줄 것이라는 점을 알고있다 : 또한 UITabBarControllerDelegate 확인 응용 프로그램 대리자를 만들기 위해이 방법을 원할 것입니다 이 방법의 복잡성.

+0

아무 것도 아니지만 어쩌면 어느 뷰가 루트인지 정의해야합니까? 그렇다면 어떻게해야합니까? 추신'popToRootViewController'가 정의되지 않았습니다.'popToRootViewControllerAnimated : (BOOL)'을 사용했습니다. – cyborg86pl

+0

@ cyborg86pl 편집 해 주셔서 감사합니다. 당신은 탭 컨트롤러로'UINavigationController'를 가지고 있습니까? 메소드'didSelectViewController'는 탭 바 위임 클래스에 놓여 있어야하며, 메소드가 호출되었는지 확인하십시오. 'navigationController' 속성은 뷰 컨트롤러가 밀어 넣은 nav 컨트롤러를 제공합니다.이 탭 컨트롤러는 tab bar 대리자가 사용되었고'UINavigationController' 탭 컨트롤러가 있으면 코드가 잘 작동한다고합니다. –

+0

iOS에 익숙해 져서 코드에 더 깊은 곳에서 문제가있는 것으로 보입니다. 내 AppDelegate에 프로그래밍 방식으로'UITabBarController'를 넣었습니다. AppDelegate 구현 또는 다른 곳에서 코드를 작성해야합니까? 나는 지금 혼란스러워 ... 또한 시도 [그] (http://stackoverflow.com/questions/4487718/how-do-i-integrate-poptorootviewcontrolleranimated-with-my-tabs?answertab=active#tab-top)하지만 여전히 충분하지 않습니다 ... – cyborg86pl

0

이 작업을 수행하는 한 가지 방법은 tabviewcontroller와 연결된보기 컨트롤러를 가져온 다음 새 개체를 만드는 것입니다.

self.tabBarController? .viewControllerers! 탭 표시 줄에 대한 viewController 배열을 가져옵니다. 내 경우에는 UINavigationController이지만 아무것도 될 수 있습니다. 그런 다음 해당 viewController 가져 와서 해당 재설정.

네비게이션 컨트롤러가 없다면 새로운 뷰 컨트롤러 개체를 만들고 그걸로 갈 수 있습니다.

아래합니다 (navcontroller에) 내 경우에는 솔루션

let vc = self.tabBarController?.viewControllers![0] as! UINavigationController 
    let newVC = YourViewControllerClass() 
    vc.viewControllers[0] = newVC as UIViewController 

이 새 것으로 이전 (인구) VC를 대체입니다!

관련 문제