当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与具有 NIB 的不同 ViewController 链接

Posted

技术标签:

【中文标题】当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与具有 NIB 的不同 ViewController 链接【英文标题】:How to programmatically link UITabBar with Different ViewControllers with NIBs when UITabBar is NOT rootViewController 【发布时间】:2016-04-08 15:41:00 【问题描述】:

我有一个 tableViewController,一旦点击一个单元格,它就会带你到FirstViewControllerFirstViewController 有一个包含 4 个项目的 UITabBar。我想以编程方式将这些按钮/项目中的每一个挂钩到我的项目中已经存在的 viewController。

我做了很多研究,但还没有找到解决这个问题的方法

我目前拥有的是FirstViewController, SecondViewController, ThirdViewController, FourthViewController

FirstViewController.xib 我有带有 4 个图标的 TabBar。

FirstViewController.h

@property (strong, nonatomic) IBOutlet UITabBarController *tabBarController;
@property (weak, nonatomic) IBOutlet UITabBarItem *tabBar;
@property (weak, nonatomic) IBOutlet UITabBarItem *firstItem;
@property (weak, nonatomic) IBOutlet UITabBarItem *secondItem;
@property (weak, nonatomic) IBOutlet UITabBarItem *thirdItem;
@property (weak, nonatomic) IBOutlet UITabBarItem *fourthItem;

FirstViewController.m

- (void)viewDidLoad 
    FirstViewController *first = [[FirstViewController alloc] init];
    SecondViewController *second = [[SecondViewController alloc] init];
    ThirdViewController *third = [[ThirdViewController alloc] init];
    FourthViewController *fourth = [[FourthViewController alloc] init];

    self.tabBarController.viewControllers = [NSArray arrayWithObject: first, second, third, fourth, nil];


当我点击第四个按钮时,此代码不起作用,例如它不显示fourthViewController nib

【问题讨论】:

【参考方案1】:

假设每个 UIViewController 子类都有一个关联的 .xib (nib) 然后使用指定的初始化器。

请使用 initWithNibName:bundle: 代替 [[FirstViewController alloc] init],而不是为每个相应的视图控制器。

例子-

[[FirstViewController alloc] initWithNibName:@"nameOfNibFile" bundle:nil];

【讨论】:

我将代码更改为FirstViewController *first = [[FirstViewController alloc] initWithNib:@"FirstViewController" bundle:nil];,但它仍然不起作用。 @Bamsworld 啊,我明白了,你在 FirstViewController 中的实现应该在它自己的 UITabBarController 子类中(我看到你有一个出口),它导入你希望添加到它的视图控制器的标题.我知道您以编程方式执行此操作,但使用标签栏模板快速启动一个新项目并查看情节提要以更好地了解它是如何连接的可能值得。

以上是关于当 UITabBar 不是 rootViewController 时,如何以编程方式将 UITabBar 与具有 NIB 的不同 ViewController 链接的主要内容,如果未能解决你的问题,请参考以下文章

UITabBar 自定义背景图像应用于一个视图控制器而不是 AppDelegate

了解 UIView 是不是是从 UITabBar 的更多菜单中推送的

当某些条件为真时显示 UITabBar

使用不是 rootViewController 的 TabBarViewController 更改 UITabBar 的图标

当 NavigationController 将视图弹出回所述 ViewController 时,UITabBar 消失

当视图在栏上时为 UITabBar 设置单独的标题与更多...?