탐색 컨트롤러 내부의 탭 모음 컨트롤러 또는 탐색 루트 보기 공유
저는 트위티 앱처럼 구조화된 UI를 구현하려고 하는데, 이는 그렇게 작동합니다. 최상위 뷰 컨트롤러는 탐색 컨트롤러이며, 루트 뷰는 "계정" 테이블 뷰입니다.계정을 클릭하면 하단에 탭 표시줄이 있는 두 번째 단계로 이동합니다.각 탭 항목은 서로 다른 목록을 표시하고 추가로 드릴다운할 수 있습니다(이후 수준에는 탭 표시줄이 표시되지 않음).
따라서 구현 계층은 다음과 같습니다.
UINavigationController
- 계정:
UITableViewController
UITabBarController
- 트윗:
UITableViewController
- 트윗/사용자/등의 세부 정보 보기
- 응답:
UITableViewController
- ...
- 트윗:
- 계정:
하는 것처럼 , 이작은 [^1] 에 대한 되지 않는 것으로 .-pushViewController:animated:
으)로 표시됨:
보기컨트롤러:스택에 푸시되는 보기 컨트롤러입니다.탭 표시줄 컨트롤러의 인스턴스일 수 없습니다.
개인 API 등은 피하고 싶은데, 정상적으로 작동하는 것 같은데 왜 이런 사용이 명시적으로 금지되는지 잘 모르겠습니다.이유 아시는 분?
탭바 컨트롤러를 메인 컨트롤러로 두고 각 탭에 별도의 탐색 컨트롤러가 포함되어 있는지 생각해 보았습니다.문제는 각 nav 컨트롤러가 단일 루트 뷰 컨트롤러(Tweetie의 "계정" 테이블)를 공유해야 한다는 것입니다. 이것은 작동하지 않는 것 같습니다. 테이블 컨트롤러를 두 번째 nav 컨트롤러로 밀어넣으면 첫 번째 nav 컨트롤러에서 제거되는 것 같습니다.다른 계정을 선택할 때 모든 장부 기록은 말할 것도 없이 고통스러울 것입니다.
올바른 방법으로 구현하려면 어떻게 해야 합니까?
[^1]: 해당 수준의 탭 모음 컨트롤러의 탐색 항목이 선택한 탭의 탐색 항목과 동기화되도록 탭 모음 컨트롤러를 하위 분류해야 하며 개별 탭의 테이블 컨트롤러는 각 세부 정보 보기를 다음으로 푸시해야 합니다.self.tabBarController.navigationController
에 self.navigationController
.
두 개의 이전 답이 맞았습니다 - 저는 사용하지 않습니다.UITabBarController
트위티에서.사용자 정의를 작성하는 것은 매우 쉽습니다.XXTabBarController
의 (의) 클래스입니다.UIViewController
nav 컨트롤러 스택에 푸시되는 것은 기쁘지만 여전히 "뷰 컨트롤러" 철학에 따라 살고 있습니다.각 "탭"("탭Tweets
/Replies
/Messages
뷰에서 플레인-ol)에 에 대한 우려가 있습니다.UITabBarController
.
저는 트위티와 비슷한 내비게이션 프레임워크를 사용하는 앱을 만들고 있습니다.저는 제 블로그 www.wiredbob.com 에 소스 코드에도 연결되는 방법에 대한 게시물을 작성했습니다.다른 프로젝트의 기초로 사용할 수 있는 전체 템플릿입니다.행운을 빕니다.
모든 UIView 컨트롤러에 UITabbar를 추가할 수 있습니다.이렇게 하면 실제로 UITabBarController를 누를 필요가 없으므로 Apple API의 지침을 준수할 수 있습니다.
인터페이스 빌더에서 UIT 탭바는 코코아 터치 라이브러리의 "Windows, Views & Bars" 아래에 있습니다.
저는 이것을 제 앱 몇 개에서 합니다.NavigationController 기반 앱에 탭바를 추가하는 방법은 탭바 컨트롤러를 사용하지 않는 것입니다.보기에 탭 막대를 추가하고, 해당 보기의 보기 컨트롤러를 탭 막대 위임자로 만들고, 보기 컨트롤러 코드의 탭 막대에서 사용자 선택에 응답합니다.
탭 막대를 사용하여 탭 막대의 뷰를 하위 뷰로 추가하거나, 다른 데이터 세트로 테이블 뷰를 다시 로드하거나, UIPicker 뷰를 다시 로드하는 등의 작업을 수행합니다.
저는 지난 한 시간 동안 다음과 같은 작업을 수행하기 위해 고군분투했습니다.UITabBar
내가 내 보기를 표시하려고 하면 숨겨질 것이기 때문에, 나는 다음과 같은 게시물을 발견했습니다.
기본적으로 다음 코드 줄에 따라 탭 모음 아래에 새 보기를 삽입해야 합니다.
[self.view insertSubview:tab2ViewController.view belowSubview:myTabBar];
내 앱에서 루트 뷰 컨트롤러는 UI 내비게이션 컨트롤러입니다.앱의 특정 지점에서 UI 탭 모음을 표시해야 합니다.이전 게시물 중 일부에서 제안한 것처럼 탐색 계층 내의 UI 보기에 UI 탭 모음을 구현하려고 시도했는데, 이것이 효과가 있습니다.하지만 탭 컨트롤러가 제공하는 기본 동작을 더 많이 원했고 UI 탐색 컨트롤러와 함께 UI 탭바 컨트롤러를 사용하는 방법을 찾았습니다.
UITabBarController의 보기를 표시하려면 다음 작업을 수행합니다.
MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
appDelegate.window.rootViewController = myUiTabBarControllerInstance;
탐색 계층에서 원래 위치로 돌아가고 싶을 때 다음 작업을 수행합니다.
appDelegate.window.rootViewController = myNavControllerInstance;
TabBar Controller를 Navigation Controller에 내장하기만 하면 됩니다.스토리보드에서:
- 보기 컨트롤러 끌기
- View 컨트롤러의 씬 클릭
- 에디터 >> 임베디드 인 >> 내비게이션 컨트롤러를 클릭합니다.
- 동일한 보기 컨트롤러에서 단추를 끕니다.
- 탭 표시줄 컨트롤러 끌기
- 푸시 Segue Action을 통해 View Controller의 버튼을 TabBar Controller에 연결합니다.
이 경우 TabBar 컨트롤러의 RootView 컨트롤러만 Navigation 컨트롤러 스택에 포함됩니다.모든 TabBarItem은 상단에 Navigation Bar가 있으며 사용자는 선택한 TabBarItem에 관계없이 언제든지 홈 화면으로 이동할 수 있습니다.
이 작업은 탐색 컨트롤러 스택의 모든 View 컨트롤러에서 수행할 수 있습니다.
만약 가능하다면 이미지와 코드를 다음 답변에 올릴 수 있도록 어떻게 하면 평판을 높일 수 있는지 제안 부탁드립니다.:)
이렇게 했어요.이것은 실제로 탭바 컨트롤러를 내비게이션 컨트롤러로 밀어넣는 것입니다.잘 작동합니다.설명서에서 애플이 이러한 방식을 지원하지 않는다는 것을 발견하지 못했습니다.누가 이 경고에 대한 링크를 줄 수 있습니까?
이것이 사실이라면, 애플이 내 앱을 앱스토어에 게시하는 것을 거부할 수 있습니까?
-(void)setArrayAndPushNextController
{
MyFirstViewController *myFirstViewController = [[MyFirstViewController alloc] init];
MySecondViewController *mySecondViewController = [[MySecondViewController alloc] init];
myFirstViewController.array = self.array;
NSArray *array = [[NSArray alloc] initWithObjects:myFirstViewController, mySecondViewController, nil];
UITabBarController *tab = [[UITabBarController alloc] init];
tab.viewControllers = array;
[array release];
UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"first title" image:nil tag:1];
UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"second title" image:nil tag:2];
myFirstViewController.tabBarItem = item1;
mySecondViewController.tabBarItem = item2;
[self stopAnimatingSpinner];
[self.navigationController pushViewController:tab animated:YES];
[tab release];
[item1 release];
[item2 release];
}
저는 이 문제에 어떻게 접근했는지 블로그에 글을 올렸습니다.사용자 지정 탭 모음 구현을 작성하는 것보다 모달 뷰를 사용하는 것이 더 간단한 해결책이었습니다.
http://www.alexmedearis.com/uitabbarcontroller-inside-a-uinavigationcontroller/
언급URL : https://stackoverflow.com/questions/576764/tab-bar-controller-inside-a-navigation-controller-or-sharing-a-navigation-root
'programing' 카테고리의 다른 글
사용자 지정 이니셜라이저가 있는 Swift 열거형은 rawValue 이니셜라이저를 잃게 됩니다. (0) | 2023.07.31 |
---|---|
Oracle Forms 6i에서 웹으로 마이그레이션하는 데 가장 적합한 솔루션은 무엇입니까? (0) | 2023.07.31 |
온라인에서 C99 공용어 표준 설명서/참고 자료/사양서를 어디서 읽을 수 있습니까? (0) | 2023.07.31 |
C에서 파일 문자를 한 문자씩 읽는 중 (0) | 2023.07.31 |
Oracle: 구분 기호와 일치하지만 두 피연산자가 모두 NULL이 아닌 경우에만 해당 (0) | 2023.07.31 |