iOS 7:选项卡控制器的不同导航项

5

我是一个相对新手的iOS应用开发者。目前我正在开发一个带有选项卡的小应用程序。我面临的问题是我想为每个选项卡设置不同的导航项。我尝试了很多方法,但都没有成功。我使用的是原生iOS语言进行编程。

在我的应用程序中,我有一个AppDelegate。在我的AppDelegate中,有一小段代码用于设置我的mainViewController:

- (void)setupOverlordViewController
{
    MainViewController *rootVC = [[MainViewController alloc] initWithNibName:nil bundle:nil];
    UINavigationController *navVC = [[UINavigationController alloc] initWithRootViewController:rootVC];
    self.window.rootViewController = navVC;
}

我正在设置我的主视图控制器中的选项卡:

- (void)viewDidLoad
{
    UIViewController *tabView1 = [[Tab1ViewController alloc] init];
    UIViewController *tabView2 = [[Tab2ViewController alloc] init];
    UIViewController *tabView3 = [[Tab3ViewController alloc] init];

    NSMutableArray *tabViewControllers = [[NSMutableArray alloc] init];
    [tabViewControllers addObject:tabView1];
    [tabViewControllers addObject:tabView2];
    [tabViewControllers addObject:tabView3];

    [self setViewControllers:tabViewControllers];

    tabView1.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"TabView1", nil)
                                  image:[UIImage imageNamed:@"tabView1.png"]
                                    tag:1];

    tabView2.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"TabView2", nil)
                                  image:[UIImage imageNamed:@"tabView2.png"]
                                    tag:2];
    tabView3.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"TabView3", nil)
                                  image:[UIImage imageNamed:@"tabView3.png"]
                                    tag:3];
}

每个视图(tabView1、tabView2、tabView3)都有自己的布局,这些布局是在视图的ViewDidLoad方法中设置的。当我想通过在ViewDidLoad方法中添加导航按钮来添加它们到导航栏时,似乎无法添加这些按钮。唯一的方法是直接在我的MainViewController中添加它们,但这样我就无法为每个选项卡设置不同的导航栏按钮。
添加按钮到导航栏的代码如下:
UIBarButtonItem *btnNewRecord = [[UIBarButtonItem alloc]     initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self      action:@selector(btnNewRecord)];


NSArray *rightItems = [NSArray arrayWithObjects:btnNewRecord, nil];
[self.navigationItem setRightBarButtonItems:rightItems];

有人可以解释一下我做错了什么吗?


@P Griep,这是我的答案,请查看 https://dev59.com/mnXYa4cB1Zd3GeqP6nv6#18143514 - Anand Gautam
@P Griep,您能解决您的问题吗? - Naga Mallesh Maddali
2个回答

3

我已经为您创建了一个使用xib文件的示例。我创建了三个视图控制器并将它们添加到导航控制器中。以下是appdelegate代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    FirstViewController *firstVC = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
    UINavigationController *firstNavVC = [[UINavigationController alloc] initWithRootViewController: firstVC];

    SecondViewController *secondVC = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
    UINavigationController *secondNavVC = [[UINavigationController alloc] initWithRootViewController: secondVC];

    ThirdViewController *thirdVC = [[ThirdViewController alloc] initWithNibName:@"ThirdView" bundle:nil];
    UINavigationController *thirdNavVC = [[UINavigationController alloc] initWithRootViewController: thirdVC];

    NSMutableArray *tabViewControllers = [[NSMutableArray alloc] init];
    [tabViewControllers addObject:firstNavVC];
    [tabViewControllers addObject:secondNavVC];
    [tabViewControllers addObject:thirdNavVC];

    firstNavVC.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"First", nil)
                                  image:nil
                                    tag:1];

    secondNavVC.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"Second", nil)
                                  image:nil
                                    tag:2];
    thirdNavVC.tabBarItem =
    [[UITabBarItem alloc] initWithTitle:NSLocalizedString(@"Third", nil)
                                  image:nil
                                    tag:3];

    UITabBarController *tabbarController = [[UITabBarController alloc] init];
    tabbarController.viewControllers = tabViewControllers;

    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
    self.window.rootViewController = tabbarController;

    [self.window makeKeyAndVisible];

    return YES;
}

以下是输出结果:
以下是输出结果:

输入图像描述 输入图像描述 输入图像描述

您可以从这里下载代码示例。


这对我不起作用。屏幕底部的选项卡栏现在只显示背景颜色,但当我按下背景颜色时,选项卡会以某种方式响应。导航项目仍然不可见。 - P Griep
@PGriep,你是在使用故事板还是XIB文件? - Naga Mallesh Maddali
不需要创建MainViewController。您可以直接将UITabbarController实例设置为UIWindow的根视图控制器。 - Naga Mallesh Maddali
如何将数组tabViewControllers分配给self.window.rootViewController?Xcode会报错。 - P Griep
1
谢谢你的帮助。你的代码运行得非常完美。经过一些小调整,它对我的应用程序非常有效! - P Griep

0

你需要为每个标签栏视图控制器单独创建导航控制器,然后在每个导航控制器上添加UIBarButtonItem。


我按照Naga Mallesh Maddali的答案尝试了,但仍然无效。 - P Griep
你把UITabbarController实例设置为UIWindow的根视图控制器了吗? - user3876446

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接