문제

내비게이션 컨트롤러 기반 애플리케이션이있었습니다. 그리고 응용 프로그램에서 탭 막대를 사용하기로 결정했습니다.

사용자가 특정 탭 막대 항목을 누르면 특정 뷰 컨트롤러를 표시하려고합니다. 코드에서 프로그래밍 방식으로 표시 할 내용을 선택하고 싶습니다.

인터페이스 빌더를 내비게이션 컨트롤러를 내 탭 막대에 추가하려고했지만 뷰 컨트롤러의 ViewWillAppear가 호출되지 않습니다.

이 기능을 어떻게 구현할 수 있습니까?

도움이 되었습니까?

해결책

그것이 "올바른 길"인지는 모르겠지만, 여기에 내가 일반적으로 세 탭으로 이것을하는 방법이 있습니다.

- (void)initControls {
    // Create the window.
    [self setWindow:[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]];

    // Create Tab Bar.
    tabCon = [[UITabBarController alloc] init];

    // Local array variable that holds the viewcontrollers.
    // Capacity corresponds to the number of VC's
    NSMutableArray *localVCArray = [[NSMutableArray alloc] initWithCapacity:3];

    MyFirstViewController *oneViewController = [[MyFirstViewController alloc] init];
    UINavigationController *oneNavCon = [[UINavigationController alloc] initWithRootViewController:oneViewController];
    [localVCArray addObject:oneNavCon];
    [oneViewController release];
    [oneNavCon release];

    MySecondViewController *twoViewController = [[MySecondViewController alloc] init];
    UINavigationController *twoNavCon = [[UINavigationController alloc] initWithRootViewController:twoViewController];
    [localVCArray addObject:twoNavCon];
    [twoViewController release];
    [twoNavCon release];

    MyThirdViewController *threeViewController = [[MyThirdViewController alloc] init];
    UINavigationController *threeNavCon = [[UINavigationController alloc] initWithRootViewController:threeViewController];
    [localVCArray addObject:threeNavCon];
    [threeViewController release];
    [threeNavCon release];

    // Set the tab bars array of view controllers to the localVCArray
    [[self tabCon] setViewControllers:localVCArray animated:YES];

    // Release the localVCArray, all of its contents are now retained by tabCon.
    [localVCArray release];

    // Add controls to window and show.
    [window addSubview:[tabCon view]];
    [window makeKeyAndVisible];
}

init 메소드에서 각 ViewController는 다음과 같은 작업을 수행 할 수 있습니다.

[[self tabBarItem] setImage:[dataSource tabConImg]];
[[self tabBarItem] setTitle:[dataSource name]];
[[self navigationItem] setTitle:[dataSource navConName]];

탭 막대에 사용 된 아이콘, 탭 막대의 제목 및 내비게이션 항목의 제목을 설정합니다.

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