2

我正在考虑使用由storyboards. 在这一点上不想碰我的应用程序的其余部分,所以我的主要NIB将留下。

现在,当从我NIB的 'edtabBar转到另一个时,NIB我只需在 IB 中添加一个viewControllertabBar然后将NIB Name属性设置NIB为按下该选项卡时我想要加载的属性。

但是我看不到“故事板名称”属性,那么这是如何完成的呢?

4

1 回答 1

3

目前没有“官方”的方式来做到这一点,但你可以使用一些技巧来做到这一点。

1)以通常的方式将您的视图控制器添加到 nib 中的标签栏。将笔尖字段留空。

2)创建您的故事板并添加您的视图控制器。设置类并设置故事板 ID(我将在此示例中使用“theID”)

3) 将静态布尔变量添加到您的 .m 文件、外部实现或接口

static BOOL aFlag = NO;

4)在您的 viewcontroller 类中覆盖此方法:

- (id) awakeAfterUsingCoder:(NSCoder *)aDecoder
{
    if (!aFlag){
        aFlag = YES;
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil];
        return [storyboard instantiateViewControllerWithIdentifier:@"theID"];
    } else {
        return self;
    }
}

本质上:

  • 当您从标签栏 nib 加载对象时,第一次调用“initWithCoder”,并且该对象在没有 nib 的情况下加载
  • 在 initWithCoder 之后,调用 awakeAfterUsingCoder 并用从情节提要加载的另一个对象替换该对象。同一类但存档在情节提要中的对象
  • 当您从情节提要加载对象时,会再次调用 initWithCoder 和 awakeAfterUsingCoder。您使用该标志来避免循环并返回 self (在第二次调用时,对象是从情节提要加载的,因此返回 self 是可以的)

我试过了,效果很好;-)如果你想要一个示例项目:http ://www.lombax.it/files/testTabNib.zip

于 2012-11-11T20:52:32.920 回答