2009-03-19 3 views
0

재미있는 상황에 처했을 때, 나는 각각 3/의 아이폰 앱을 가지고 있습니다 (필터링 문제라고 말할 수 있습니다). 지금까지 나는 이것에 대한 3 개의 분리 된 새그들을 가지고 있었고, 각각 컨트롤러를 가지고 있었고, 게다가 UITableViewController은 위에있는 버튼을 위해서 UINavigationController 안에 있었다.UITabBarController를 사용하는 UITableViewController가 표시되지 않습니다.

이제 애플리케이션을 최적화하고 풋 프린트를 줄이기 위해 모든 로직을 하나의 공통 컨트롤러 (UITableViewController)에 설치하고 NIB를 하나만 남겨 둡니다. 공통 제어기는 데이터를 필터링하고 올바른 데이터를 가리 키도록 처리합니다.

그래서 저는 네비게이션 컨트롤러의 3에 같은 일반적인 컨트롤러를로드

navControllerA = [[UINavigationController alloc] initWithRootViewController: commonTableController]; 

UITabBarController 이러한 네비게이션 컨트롤러를 추가 :

navigationControllersArray = [NSArray arrayWithObjects: navControllerA, navControllerB, navControllerC, nil]; 
[tabController setViewControllers:[NSArray arrayWithArray:navigationControllersArray]]; 

이제 모든 미세한의 탭이 표시되면 테이블 뷰가 표시됩니다. 그러나 다음 UITabBarItem을 터치하고 UITableViewController이 표시되지 않는 이전 화면으로 돌아 가면 UIWindow 만 볼 수 있습니다. UITableViewController은 마지막으로 접촉 한 UITabBarItem에만 표시됩니다.

어떤 종류의 UITabBar보기로드 메커니즘을 알고 있습니까?

답변

1

각보기 컨트롤러는 하나의 내비게이션 컨트롤러의 스택에만있을 수 있으며 스택의 여러 위치에있을 수 없습니다.

하나의보기 컨트롤러 만 사용하여 메모리를 절약하려면 탭 막대 컨트롤러를 사용하는 대신 탭 막대보기를 사용하고 루트보기 컨트롤러를 대리인으로 설정하는 것이 좋습니다. 그런 다음 루트 뷰 컨트롤러는 탭 막대 이벤트를 직접 해석하고 이에 따라 필터링을 변경합니다.

0

하나의보기에서 데이터 세트를 전환하려면, 탭 막대 대신 도구 모음을 사용하는 것이 더 나은 방법 인 것처럼 보입니다. 탭 표시 줄은 모든보기가 하나의보기 및 하나의 내비게이션 컨트롤러의 자식이되어야하는 다른 포스터와 같이보기를 전환하는 것에 관한 것입니다. 이 단일 컨트롤러를 호출하여 데이터 세트를 전환하는 탭 표시 줄을 사용하는 것이 훨씬 의미가 있습니다. 그렇지 않으면 UISegmentedControl을 사용하면 세 개의 요소가 있고 세 개의 세그먼트 만 가질 수 있으므로 잘 작동합니다.

0

UINavigationController에서 UITabbarController를 사용할 수 없습니다. 스택을 보도록 푸시 할 수있는 UITabbbarController를 모방하는 일반 UIViewController를 작성할 수 있습니다. 이 내용은 SO question을 참조하십시오.