Xib与Storyboard,如何更新

时间:2011-11-19 02:11:54

标签: iphone ios5 xib nib storyboard

我在新的iOS 5.0上学习Storyboard。使用和实现似乎很简单,但我的问题是...... 如何将旧Xib更新为Storyboard?

例如。我有一些我在没有故事板时开发的类,其中一些类带有xib文件,可以帮助我快速设置自定义布局。 显然,当我使用这种类时,我需要使用initWithNibName实例化它:bundle:它现在可以使用了,我可以多次使用它,因为布局是在xib中编码的。

Now Storyboard ... Storyboard不允许从xib加载视图控制器,我没有找到在主故事板中加载storyboard文件的方法。看起来我每次在新项目中使用它时都需要为特定的视图控制器重新配置布局。 看来现在我不得不在每个使用这个控制器的新应用程序中重新配置我的控制器的布局,而不是使用内部布局的xib文件。

也许有些事我不明白。 任何人都可以帮助我理解使用故事板的最佳方式吗?

提前谢谢。

加布里埃尔。

编辑回复sw3n

也许我理解感谢sw3n。以下代码有效,但这完全正确吗?

// All this code is implemented inside the MyViewController class.

// Attached to an UIButton;
- (void)loadNewController:(id)sender {
    [self performSegueWithIdentifier:@"newControllerIdentifier" sender:sender];
}

- (void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender {
    // As suggested by sw3n
    // Load the storyboard from file.
    UIStoryboard *storyboardTest = [UIStoryboard storyboardWithName:@"StoryBoardLoad_Test" bundle:nil];
    // Instantiate the viewController that live in the storyboard file
    UIViewController *destinationViewController = [storyboardTest instantiateViewControllerWithIdentifier:@"newControllerIdentifier"];

    // Instantiate a segue to start the chain
    UIStoryboardSegue *segue = [[UIStoryboardSegue alloc] initWithIdentifier:identifier source:self destination:destinationViewController];
    [self prepareForSegue:segue sender:sender];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
    if ([segue.identifier isEqualToString:@"newControllerIdentifier"]) {
        [segue.destinationViewController setModalTransitionStyle:UIModalTransitionStyleFlipHorizontal];

        // Are there new options to present the controller?
        // If I was in a NavigationController a could obviously push it.
        [self presentModalViewController:segue.destinationViewController animated:YES];
    }
}

3 个答案:

答案 0 :(得分:3)

这是你要找的吗?

(UIStoryboard *)storyboardWithName:(NSString *)name bundle:(NSBundle *)storyboardBundleOrNil

答案 1 :(得分:2)

听起来有点迟,但答案似乎没有结论。你可以使用上面提到的Nightfirecat的storyboardWithName()。从UIStoryboard创建新的Viewcontroller,并将新的ViewController挂钩到视图层次结构中所需的位置。您也可以使用多个Storyboard文件以这种方式划分您的UX设计。我写了一些关于如何在我的网站上将它作为rootcontroller挂钩的东西,但它应该可以在任何地方工作。

答案 2 :(得分:0)

Interface Builder:

  1. 在视图控制器中选择segue
  2. 转到属性标签
  3. 给segue一个名字
  4. 设置过渡样式
  5. 在代码中:

    [self performSegueWithIdentifier:@"mySegueNameFromInterfaceBuilder" sender:self];