代码之家  ›  专栏  ›  技术社区  ›  Ilya Suzdalnitski

按程序选择的UItabar视图

  •  0
  • Ilya Suzdalnitski  · 技术社区  · 15 年前

    我有一个基于导航控制器的应用程序。我决定在我的应用程序中使用标签栏。

    当用户按下某个选项卡栏项时,我想显示某个视图控制器——我想在代码中以编程方式选择要显示的控件。

    我试图在Interface Builder中添加导航控制器到我的选项卡栏中,但未调用其视图控制器的View。

    如何实现此功能?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Cœur N0mi    6 年前

    我不知道这是不是“正确的方法”,但下面是我通常使用三个选项卡来完成的方法。

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

    要设置选项卡栏中使用的图标、选项卡栏中的标题以及导航项的标题。