标签栏,视图控制器和故事板

时间:2014-06-09 14:36:18

标签: ios objective-c uitabbarcontroller uistoryboard

好的,所以我有一个小难题需要解决。

我有一个标签栏控制器,其中两个标签(实际上它是三个,但这显示了问题)具有基本相同的UI。

他们以相同的方式显示信息,但他们使用不同的查询来获取该信息。

现在,因为它们是单独的选项卡,我需要在Storyboard上有两个实例才能创建这些选项卡。每个选项卡还有一个用于" root"的UINavigationController。选项卡。但这意味着我在其中设置的任何UI都必须在另一个中重复。我使用运行时属性来更改控制器从中获取信息的位置。

我可以只有一个实例并将其连接到两个导航控制器。这意味着我可以在一个地方进行UI更改,但是如何配置每个视图控制器以获取正确的信息?

我确定有办法解决这个问题,但我已经陷入了困境,目前无法找到出路。

如果有人能够理解我所说的话,请提供任何建议。

这是我根据答案尝试的内容,但它仅在第一个标签上加载。后续选项卡只有一个没有根视图的nag控制器。

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以通过控制再次从标签栏控制器拖动并选择“视图控制器”,将导航控制器(及其顶视图控制器)第二次连接到标签栏控制器。这将为您提供两个导航控制器实例和两个顶视图控制器。这样,如果更改UI,则只需编辑一个场景。我通过从选项卡式应用程序模板开始,将第二个控制器嵌入导航控制器,然后控制拖动到第二个导航控制器以第二次连接它来测试它。您只能在导航控制器的标签栏项目中看到一个标题,因此我在SecondViewController.m中执行了以下操作来更改标题,

@interface SecondViewController ()
@property (weak,nonatomic) IBOutlet UILabel *label;
@end

@implementation SecondViewController {
    BOOL isThird;
}

-(void)awakeFromNib {
    if ([self.navigationController isEqual:self.tabBarController.viewControllers[2]]) isThird = YES;
    if (isThird) {
        self.navigationController.tabBarItem.title = @"Third";
    }
}


-(void)viewDidLoad {
    [super viewDidLoad];
    if (isThird) {
        self.label.text = @"Third View";
    }else{
        self.label.text = @"Second View";
    }
}

这将为您提供第三个控制器的新标题,并且您可以在代码中使用BOOL,isThird来区分SecondViewController的两个实例,以便在其中加载不同的信息。

enter image description here