从Nib内部启动Storyboard?

时间:2012-04-04 16:39:47

标签: xcode ios5 interface-builder storyboard

我正在考虑使用storyboards提供的新功能重建我的应用的设置部分。此时不想触摸我的应用程序的其余部分,因此我的主NIB将会停留。

现在,当我从NIB'ed tabBar转到另一个NIB时,我只需将viewController添加到IB中的tabBar,然后设置{ {1}}属性到我想要在按下该选项卡时加载的NIB Name

但是我没有看到“故事板名称”属性,所以这是怎么做到的?

1 个答案:

答案 0 :(得分:3)

目前没有“官方”的方法,但你可以用一些技巧来做。

1)以通常的方式将视图控制器添加到nib中的tabbar。将nib字段留空。

2)创建故事板并添加viewcontroller。设置类并设置一个故事板ID(本例中我将使用“theID”)

3)在你的.m文件,外部实现或接口

中添加一个静态bool var
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并在那里用另一个从storyboard加载的对象替换该对象。同一类的对象,但在故事板中存档
  • 从故事板加载对象时,再次调用initWithCoder和awakeAfterUsingCoder。您使用该标志来避免循环并返回self(在第二次调用时,该对象从storyboard加载,因此返回self是正常的)

我试过,它运作良好;-) 如果你想在这里是一个示例项目:http://www.lombax.it/files/testTabNib.zip