4

我尝试了很多选择,但没有一个有效。问题很简单:

我有一个 UITabBarController,它非常适合 5 个选项卡。

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

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

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

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

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

第二个标签完美地工作!

另一种选择是将 NavController 链接两次,但在这种情况下,我需要根据选项卡索引以编程方式配置标题和图像,我不确定在哪里可以执行此操作。

所以 :

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

2 回答 2

1

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

编辑后

如果您有一个作为根视图控制器之一制作的复杂场景,您可以复制并粘贴它,另一个将出现在 IB 窗口左侧的对象列表中(以及画布上,但它就在另一个上面,所以你需要把它拖下来才能看到它)。您可以将第二个导航控制器连接到它。您可以这样做,或者拖入两个不同的 UIViewController 并将它们都更改为您的子类(如果您需要为 2 个不同的实例提供不同外观的界面)。

于 2013-01-07T19:53:59.850 回答
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;
于 2013-01-07T19:38:12.953 回答