programing

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

sourcetip 2023. 7. 31. 22:25
반응형

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

저는 트위티 앱처럼 구조화된 UI를 구현하려고 하는데, 이는 그렇게 작동합니다. 최상위 뷰 컨트롤러는 탐색 컨트롤러이며, 루트 뷰는 "계정" 테이블 뷰입니다.계정을 클릭하면 하단에 탭 표시줄이 있는 두 번째 단계로 이동합니다.각 탭 항목은 서로 다른 목록을 표시하고 추가로 드릴다운할 수 있습니다(이후 수준에는 탭 표시줄이 표시되지 않음).

따라서 구현 계층은 다음과 같습니다.

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

하는 것처럼 , 이작은 [^1] 에 대한 되지 않는 것으로 .-pushViewController:animated:으)로 표시됨:

보기컨트롤러:스택에 푸시되는 보기 컨트롤러입니다.탭 표시줄 컨트롤러의 인스턴스일 수 없습니다.

개인 API 등은 피하고 싶은데, 정상적으로 작동하는 것 같은데 왜 이런 사용이 명시적으로 금지되는지 잘 모르겠습니다.이유 아시는 분?

탭바 컨트롤러를 메인 컨트롤러로 두고 각 탭에 별도의 탐색 컨트롤러가 포함되어 있는지 생각해 보았습니다.문제는 각 nav 컨트롤러가 단일 루트 뷰 컨트롤러(Tweetie의 "계정" 테이블)를 공유해야 한다는 것입니다. 이것은 작동하지 않는 것 같습니다. 테이블 컨트롤러를 두 번째 nav 컨트롤러로 밀어넣으면 첫 번째 nav 컨트롤러에서 제거되는 것 같습니다.다른 계정을 선택할 때 모든 장부 기록은 말할 것도 없이 고통스러울 것입니다.

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

[^1]: 해당 수준의 탭 모음 컨트롤러의 탐색 항목이 선택한 탭의 탐색 항목과 동기화되도록 탭 모음 컨트롤러를 하위 분류해야 하며 개별 탭의 테이블 컨트롤러는 각 세부 정보 보기를 다음으로 푸시해야 합니다.self.tabBarController.navigationControllerself.navigationController.

두 개의 이전 답이 맞았습니다 - 저는 사용하지 않습니다.UITabBarController트위티에서.사용자 정의를 작성하는 것은 매우 쉽습니다.XXTabBarController의 (의) 클래스입니다.UIViewControllernav 컨트롤러 스택에 푸시되는 것은 기쁘지만 여전히 "뷰 컨트롤러" 철학에 따라 살고 있습니다.각 "탭"("탭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에 내장하기만 하면 됩니다.스토리보드에서:

  1. 보기 컨트롤러 끌기
  2. View 컨트롤러의 씬 클릭
  3. 에디터 >> 임베디드 인 >> 내비게이션 컨트롤러를 클릭합니다.
  4. 동일한 보기 컨트롤러에서 단추를 끕니다.
  5. 탭 표시줄 컨트롤러 끌기
  6. 푸시 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

반응형