Xcode 从Nib内部启动故事板?

Xcode 从Nib内部启动故事板?,xcode,ios5,interface-builder,storyboard,Xcode,Ios5,Interface Builder,Storyboard,我正在考虑使用故事板提供的新功能重新构建我的应用程序的设置部分。此时不想触摸我的应用程序的其余部分,因此我的主NIB将保留 现在,当从我的NIB'edtabBar转到另一个NIB时,我只需在IB中的tabBar中添加一个viewController,然后将NIB Name属性设置为按下该选项卡时要加载的NIB 但是我看不到“故事板名称”属性,那么这是如何做到的呢?目前没有“官方”的方法,但是你可以使用一些技巧来做到这一点 1) 以通常的方式将视图控制器添加到nib中的选项卡栏中。将nib字段留空

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

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

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

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

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

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

3) 将静态bool变量添加到.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之后,将调用awakAfterUsingCoder,在那里您将用从情节提要加载的另一个对象替换该对象。同一类但存档在情节提要中的对象
  • 从情节提要加载对象时,将再次调用initWithCoder和awakAfterUsingCoder。您可以使用该标志来避免循环并返回self(在第二次调用时,对象是从情节提要加载的,因此返回self是可以的)
我试过了,效果很好;-)
如果您想在这里看到一个示例项目:

它成功了,但由于某种原因,TabBarItem的图像消失了。。。知道为什么吗?选项卡栏项(出现在选项卡栏上的按钮)是视图控制器的属性,而不是选项卡栏的属性。因此,您必须在序列图像板中的新ViewController中添加一个选项卡栏项。您可以通过编程或简单的图形方式来完成。从ViewController下的对象库中拖放新的选项卡栏项(作为子项)