문제

나는 트윗 앱은 그렇게 행동합니다. 최상위 뷰 컨트롤러는 내비게이션 컨트롤러 인 것으로 보이며 루트보기는 "계정"테이블보기입니다. 계정을 클릭하면 바닥에 탭 막대가있는 두 번째 레벨로 이동합니다. 각 탭 항목에는 다른 목록이 표시되며 추가로 드릴 다운 할 수 있습니다 (후속 레벨에는 탭 막대가 표시되지 않음).

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

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

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

ViewController: 스택에 밀려 나가는 뷰 컨트롤러. 탭 바 컨트롤러 인스턴스가 될 수 없습니다.

개인 API 등을 피하고 싶지만이 사용법이 왜 잘 작동하는지에도 명시 적으로 금지되는 이유는 확실하지 않습니다. 그 이유를 아는 사람이 있습니까?

탭 바 컨트롤러를 메인 컨트롤러로 넣는 것에 대해 생각했으며 각 탭에는 별도의 탐색 컨트롤러가 포함되어 있습니다. 이것의 문제는 각 NAV 컨트롤러가 단일 루트보기 컨트롤러 (즉, "계정"테이블을 공유해야한다는 것입니다. 트윗) - 이것은 작동하지 않는 것 같습니다. 테이블 컨트롤러를 두 번째 NAV 컨트롤러로 밀면 첫 번째에서 제거하는 것 같습니다. 다른 계정을 선택할 때 모든 서적 관리는 말할 것도없이 아마도 고통 일 것입니다.

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

^1] : 해당 레벨의 탭 바 컨트롤러의 탐색 항목이 선택한 탭의 탐색 항목과 동기화되도록 탭 바 컨트롤러를 서브 클래싱해야합니다. self.tabBarController.navigationController 대신에 self.navigationController.

도움이 되었습니까?

해결책

두 개의 이전 답변이 제대로되었습니다 - 나는 사용하지 않습니다. UITabBarController 트윗에서. 관습을 작성하는 것은 매우 쉽습니다 XXTabBarController (평범한 서브 클래스 UIViewController) NAV 컨트롤러 스택으로 밀려나게되어 기쁘지만 여전히 "View Controller"철학에 의해 살아납니다. 계정 별보기의 각 "탭"(Tweets/Replies/Messages) 자체 뷰 컨트롤러이며, 걱정하는 한 평원에 의해 화면에서 교환되고 있습니다. UITabBarController.

다른 팁

트윗과 유사한 내비게이션 프레임 워크를 사용하는 앱을 만들고 있습니다. 내 블로그 에서이 작업을 수행하는 방법에 대한 게시물을 썼습니다. www.wiredbob.com 소스 코드에도 링크됩니다. 다른 프로젝트의 기초로 취하고 사용할 수있는 전체 템플릿입니다. 행운을 빕니다!

UIViewController에 Uitabbar를 추가 할 수 있습니다. 그렇게하면 실제로 UitabbarController를 밀어야 할 필요가 없으므로 Apple API의 지침을 유지합니다.

인터페이스 빌더에서 Uitabbar는 Cocoa Touch 라이브러리의 "Windows, Views & Bars"아래에 있습니다.

나는 두 앱에서 이것을한다. NavigationController 기반 앱에 탭 표시 줄을 추가하는 요령은 TabBarController를 사용하지 않는 것입니다. 보기에 탭 표시 줄을 추가하고 해당보기의 뷰 컨트롤러를 TabbardELegate로 만들고 View Controller 코드의 탭 표시 줄에서 사용자 선택에 응답하십시오.

탭 막대를 사용하여 탭 표시 줄에 추가보기를 추가하여 하위 뷰로, 다른 데이터 세트로 테이블보기를 다시로드하고 UIPICKERVIWOW 등을 다시로드합니다.

나는 지난 1 시간 동안 구현하기 위해 고군분투하고있었습니다. UITabBar 내 견해를 표시하려고 할 때 숨겨져 있기 때문입니다. 그런 다음 이것을 찾았습니다 게시하다:

기본적 으로이 코드 라인에 따라 탭 바 아래에 새 뷰를 삽입하십시오.

[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를 탐색 컨트롤러로 밀고 있습니다. 잘 작동합니다. Apple이 이런 식으로 지원하지 않는 문서의 어느 곳에서도 찾지 못했습니다. 누군가 나 에게이 경고에 대한 링크를 줄 수 있습니까?

이것이 진실이라면 Apple이 내 앱을 AppStore에 게시하는 것을 거부 할 수 있습니까?

-(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];
}

이것은 내비게이션 컨트롤러에 TabbarController를 간단히 포함시켜 달성 할 수 있습니다. 스토리 보드에서 :

  1. ViewController를 드래그하십시오
  2. ViewController의 장면을 클릭하십시오
  3. 편집자 >> 내비게이션 컨트롤러에 포함됩니다.
  4. 동일한 ViewController의 버튼을 드래그하십시오.
  5. TabbarController를 드래그하십시오
  6. 푸시 Segue 동작을 통해 ViewController의 버튼을 TabbarController에 연결하십시오.

이 경우 TabbarController의 RootViewController 만 탐색 컨트롤러 스택에 있습니다. 모든 Tabbaritems는 상단에 내비게이션 바가 있으며 사용자는 선택한 Tabbaritem에 관계없이 언제든지 홈 화면으로 갈 수 있습니다.

이것은 내비게이션 컨트롤러 스택의 모든 뷰 콘트롤러에서 수행 할 수 있습니다.

작동하는 경우 다음 답변에 이미지와 코드를 게시 할 수 있도록 명성을 높이는 방법을 제안하십시오. :)

이 문제에 어떻게 접근했는지에 대한 블로그 게시물을 썼습니다. 저에게는 모달보기를 사용하는 것이 사용자 정의 탭 바 구현을 작성하는 것보다 간단한 솔루션이었습니다.

http://www.alexmedearis.com/uitabbarcontroller-inside-a-uinavigationcontroller/

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