[iphone] 탐색 컨트롤러 내부의 탭 모음 컨트롤러 또는 탐색 루트보기 공유

저는 Tweetie 앱 에서와 같이 작동 하는 UI 구조를 구현하려고합니다 . 최상위 뷰 컨트롤러는 루트 뷰가 “계정”테이블 뷰인 탐색 컨트롤러 인 것 같습니다. 계정을 클릭하면 하단에 탭 바가있는 두 번째 레벨로 이동합니다. 각 탭 항목은 다른 목록을 표시하며 추가로 드릴 다운 할 수 있습니다 (이후 레벨에는 탭 표시 줄이 표시되지 않음).

따라서 이것은 구현 계층 구조가 다음과 같습니다.

  • UINavigationController
    1. 계정 :UITableViewController
    2. UITabBarController
      1. 트윗 :UITableViewController
        • 트윗 / 사용자 / 등의 상세보기
      2. 답글 :UITableViewController

이것은 작동하는 것처럼 보이지만 [^ 1]에 대한 SDK 문서에 따르면 지원되지 않는 것 같습니다 -pushViewController:animated:(강조 추가됨).

viewController : 스택에 푸시되는 뷰 컨트롤러입니다. 탭 막대 컨트롤러의 인스턴스가 될 수 없습니다.

비공개 API 등을 피하고 싶지만 제대로 작동하는 것처럼 보이지만이 사용이 명시 적으로 금지 된 이유가 무엇인지 잘 모르겠습니다. 이유를 아는 사람 있나요?

탭 모음 컨트롤러를 기본 컨트롤러로 설정하고 각 탭에는 별도의 탐색 컨트롤러가 포함되어 있습니다. 문제는 각 탐색 컨트롤러가 단일 루트 뷰 컨트롤러 (즉, Tweetie 의 “Accounts”테이블 ) 를 공유해야한다는 것입니다. 작동하지 않는 것 같습니다. 테이블 컨트롤러를 두 번째 탐색 컨트롤러로 푸시하면 제거되는 것 같습니다. 처음부터. 다른 계정을 선택할 때 모든 부기 관리는 말할 것도없고 아마도 고통 스러울 것입니다.

이를 올바른 방법으로 구현하려면 어떻게해야합니까?

[^ 1] : 탭 모음 컨트롤러는 해당 수준에있는 탭 모음 컨트롤러의 탐색 항목이 선택한 탭의 탐색 항목과 동기화 상태를 유지하도록 하위 클래스 화되어야하며 개별 탭의 테이블 컨트롤러는 self.tabBarController.navigationController대신 해당 세부보기를 푸시해야합니다. self.navigationController.



답변

이전 두 가지 답변이 맞았습니다-저는 UITabBarControllerTweetie에서 사용하지 않습니다 . nav 컨트롤러 스택에 밀어 넣는 것이 만족 스럽지만 여전히 “view controller”철학에 따라 살아가는 사용자 지정 XXTabBarController(의 일반 하위 클래스 UIViewController) 을 작성하는 것은 매우 쉽습니다 . 계정 별 뷰 ( Tweets/ Replies/ Messages)의 각 “탭” 은 자체 뷰 컨트롤러이며, 그들이 염려하는 한 그들은 화면에서 plain-ol로 바뀝니다 UITabBarController.


답변

저는 Tweetie와 유사한 탐색 프레임 워크를 사용하는 앱을 만들고 있습니다. 이 작업을 수행하는 방법에 대한 게시물을 내 블로그 www.wiredbob.com 에 작성했으며 소스 코드에도 연결되어 있습니다. 다른 프로젝트의 기초로 사용할 수있는 전체 템플릿입니다. 행운을 빕니다!


답변

모든 UIViewController에 UITabBar를 추가 할 수 있습니다. 이렇게하면 실제로 UITabBarController를 푸시 할 필요가 없으므로 Apple API의 지침을 준수합니다.

인터페이스 빌더에서 UITabBar는 Cocoa Touch Library의 “Windows, View & Bars”에 있습니다.


답변

내 앱 몇 개에서이 작업을 수행합니다. navigationController 기반 앱에 탭 바를 추가하는 비결은 TabBarController를 사용하지 않는 것입니다. 보기에 탭 표시 줄을 추가하고, 해당보기에 대한보기 컨트롤러를 TabBarDelegate로 만들고,보기 컨트롤러 코드의 탭 표시 줄에서 사용자 선택에 응답합니다.

Tab Bars를 사용하여 Tab Bar의 뷰에 하위 뷰로 추가 뷰를 추가하고, 다른 데이터 세트로 테이블 뷰를 다시로드하고, UIPickerView를 다시로드하는 등의 작업을 수행합니다.


답변

UITabBar내 뷰를 표시하려고 할 때 숨겨 질 것이기 때문에 지난 한 시간 동안 a를 구현하는 데 어려움을 겪고있었습니다 . 그런 다음이 게시물을 찾았 습니다 .

기본적으로 다음 코드 줄에 따라 탭바 아래에 새보기를 삽입해야합니다.

[self.view insertSubview:tab2ViewController.view belowSubview:myTabBar];


답변

내 앱에서 루트 뷰 컨트롤러는 UINavigation 컨트롤러입니다. 앱의 특정 지점에서 UITabBar를 표시해야합니다. 이전 게시물 중 일부가 제안했듯이 탐색 계층 구조 내의 UIView에 UITabBar를 구현하려고 시도했지만 작동합니다. 그러나 탭 컨트롤러가 제공하는 기본 동작을 더 많이 원한다는 것을 알았고 UINavigation 컨트롤러와 함께 UITabBarController를 사용하는 방법을 찾았습니다.

1) UITabBarController의 뷰를 표시하려면 다음을 수행합니다.

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = myUiTabBarControllerInstance;

2) 탐색 계층 구조에서 내가 있던 위치로 돌아가고 싶을 때 다음을 수행합니다.

appDelegate.window.rootViewController = myNavControllerInstance;


답변

이것은 단순히 네비게이션 컨트롤러에 TabBarController를 포함시킴으로써 달성 될 수 있습니다. 스토리 보드에서 :

  1. ViewController 드래그
  2. ViewController의 장면을 클릭하십시오
  3. 에디터 >> Embed in >> Navigation Controller를 클릭하십시오.
  4. 동일한 ViewController에서 버튼을 드래그합니다.
  5. TabBarController 드래그
  6. Segue Action 푸시를 통해 ViewController의 버튼을 TabBarController에 연결합니다.

이 경우 TabBarController의 RootViewController 만 탐색 컨트롤러의 스택에 있습니다. 모든 TabBarItems는 상단에 탐색 모음이 있으며 사용자는 선택한 TabBarItem에 관계없이 언제든지 홈 화면으로 이동할 수 있습니다.

이것은 Navigation Controller의 스택에있는 모든 ViewController에서 수행 될 수 있습니다.

작동하면 다음 답변에서 이미지와 코드를 게시 할 수 있도록 평판을 높이는 방법을 제안하십시오. 🙂