문제

나는 흥미로운 상황에 부딪쳤다. 나는 3 인 iPhone 앱을 가지고있다. UITableViewControllers 각각 동일한 데이터를 더 많이 표시합니다 (필터링 문제라고 말할 수 있음). 지금까지 나는 이것을 위해 3 개의 별도의 펜촉을 가졌으며, 각각 자체 컨트롤러, 추가로 UITableViewControllerS는 안에 있었다 UINavigationController 맨 위에 버튼을 위해.

이제 앱을 최적화하고 발자국을 줄이려면 모든 논리를 하나의 공통 컨트롤러 ( UITableViewController) 그리고 하나의 펜촉을 제자리에 두었습니다. 공통 컨트롤러는 데이터를 필터링하고 올바른 데이터를 가리키는 것을 관리합니다.

그래서 나는 그것을로드한다 같은 내비게이션 컨트롤러 3 개에 대한 공통 컨트롤러 :

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

이 내비게이션 컨트롤러를 추가했습니다 UITabBarController:

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

이제 모든 것이 괜찮고 탭이 표시되고 테이블 뷰가 표시됩니다. 그러나 일단 당신이 다음을 만지면 UITabBarItem 그리고 이전의 것으로 되돌아 가십시오 UITableViewController 표시되지 않으면 a 만 볼 수 있습니다 UIWindow 그곳에서. 그만큼 UITableViewController 마지막으로 만지는 것에 대해서만 눈에 띄는 상태입니다 UITabBarItem.

어떤 종류가 있습니까? UITabBar내가 모르는 로딩 메커니즘보기?

도움이 되었습니까?

해결책

각보기 컨트롤러는 하나의 탐색 컨트롤러 스택에만있을 수 있으며 해당 스택의 여러 장소에있을 수 없습니다.

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

다른 팁

하나의보기 내에서 데이터 세트를 전환하려면 더 나은 접근 방식은 탭 막대가 아닌 툴바를 사용하는 것 같습니다. 탭 막대는 다른 포스터에서 언급 한 바와 같이 모든 뷰가 하나의 뷰의 어린이와 하나의 탐색 컨트롤러 여야하는 뷰를 전환하는 것입니다. 이 단일 컨트롤러를 호출하여 데이터 세트를 전환하는 탭 막대가 있으면 훨씬 더 의미가 있습니다. 그렇지 않으면 UiseMentedControl을 사용하면 세 가지 요소가 있고 최대 3 개의 세그먼트 만 가질 수 있기 때문에 잘 작동합니다.

UinavigationController 내부에서 UitabbarController를 사용하는 것은 지원되지 않습니다. 정상적인 uiviewcontroller를 작성하여 uitabbbarcontroller를 모방하여 스택을 볼 수 있습니다. 이것 좀 봐 그래서 질문.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top