相同视图控制器的2个实例:一个在TabBarController中不起作用

时间:2013-01-07 18:51:34

标签: iphone ios interface-builder

我尝试了很多选项,但没有一个可行。问题很简单:

我有一个UITabBarController,它适用于5个标签。

我的问题位于第一个和第二个标签上:我需要在每个标签下使用相同的视图控制器,当然还有2个不同的实例。

我尝试添加2个不同的导航控制器,所有导航控制器都指向与根控制器相同的视图控制器。这样我就可以在每个导航控制器上自定义选项卡文本和图标(我主要在界面构建器中工作)。

              __ NavController 1 _
             /                    \
TabController -- NavController 2 -- ViewController

使用此配置:只有第一个标签工作(由NavController1处理的标签),第二个标签不显示视图(我绝对不知道显示哪个视图,但它是空的,黑色并且有一个默认的空蓝色导航栏)。如果我只保留一个从导航控制器到我的视图控制器的链接,如下所示:

             __ NavController 1 
             /                    
TabController -- NavController 2 -- ViewController

第二个标签完美无缺!

另一个选项是链接NavController两次,但在这种情况下,我需要根据选项卡索引以编程方式配置标题和图像,我不知道在哪里可以做到这一点。

所以:

  • 这是正常行为吗?
  • IB有解决方案吗?
  • 如果我需要以编程方式设置选项卡外观,我应该在哪里执行此操作?

2 个答案:

答案 0 :(得分:1)

如果您想以编程方式执行此操作,则可以在应用委托中使用与此类似的代码。

UITabBarController *tbc = [[UITabBarController alloc] init];


MyViewController *mvc1 = [[MyViewController alloc] init];
MyViewController *mvc2 = [[MyViewController alloc] init];
mvc1.title=@"One";
mvc2.title=@"Two";
mvc1.tabBarItem.image=[UIImage imageNamed:@"one.png"];
mvc2.tabBarItem.image=[UIImage imageNamed:@"two.png"];


UINavigationController *nc1 = [[UINavigationController alloc] initWithRootViewController:mvc1];
UINavigationController *nc2 = [[UINavigationController alloc] initWithRootViewController:mvc2];


[tbc setViewControllers:[NSArray arrayWithObjects:nc1,nc2, nil]];


self.window.rootViewController = tbc;

答案 1 :(得分:1)

您应该可以在IB中执行此操作。只需添加两个导航控制器作为两个选项卡的基本控制器,为每个选项卡添加根视图控制器(不仅仅是您在问题中显示的那个),并将这些根视图控制器的类更改为您的子类。

编辑后

如果你有一个复杂的场景作为一个根视图控制器,你可以复制并粘贴它,另一个将出现在IB窗口左侧的对象列表中(并在画布上显示为好吧,但它正好在另一个之上,所以你需要把它拖下去看它。您可以将第二个导航控制器连接到它。您可以这样做,也可以拖入两个不同的UIViewControllers并将它们更改为您的子类(如果您需要为两个不同的实例使用不同的界面)。