【问题标题】:iOS 7: different navigation items for tab bar controlleriOS 7:标签栏控制器的不同导航项
【发布时间】:2014-10-01 17:27:59
【问题描述】:

我对 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;
}

我正在 MainViewController 中设置标签:

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

每个View(tabView1、tabView2、tabView3)都有自己的布局,在View的ViewDidLoad方法中设置。当我想通过在 ViewDidLoad 方法中添加导航栏来添加导航按钮时,但似乎无法添加按钮。添加它们的唯一方法是直接在我的 MainViewController 中,但是我无法将导航栏按钮设置为不同的 foreach 选项卡。

将按钮添加到我的导航栏的代码如下:

UIBarButtonItem *btnNewRecord = [[UIBarButtonItem alloc]     initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self      action:@selector(btnNewRecord)];


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

谁能解释一下我做错了什么?

【问题讨论】:

标签: ios objective-c ios7 uinavigationcontroller uinavigationitem


【解决方案1】:

我使用 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;
}

以下是输出:

您可以下载代码示例here

【讨论】:

  • 这对我不起作用。屏幕底部的标签栏现在只显示背景颜色,但是当我按下背景颜色时,标签会以某种方式响应。导航项仍然不可见。
  • @PGriep,您使用的是故事板还是 xib?
  • 不需要创建MainViewController。您可以直接将您的 UITabbarController 实例设置为 UIWindow 的根视图控制器。
  • 如何将数组 tabViewControllers 分配给 self.window.rootViewController? Xcode 给了我错误。
  • 感谢您的帮助。您的代码运行完美。通过一些小的调整,它适用于我的应用程序!
【解决方案2】:

您需要为每个标签栏视图控制器提供单独的导航控制器,然后您可以在每个导航控制器上添加 UIBarButtonItem。

【讨论】:

  • 我按照 Naga Mallesh Maddali 的回答这样做了,但它仍然无法正常工作。
  • 您是否将您的 UITabbarController 实例设置为 UIWindow 的根视图控制器?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
相关资源
最近更新 更多