1

我一直在尝试使用新的 xcode 5 故事板范例,而不是专门创建 .xib 文件。我有两个 VC——第一个是由 Xcode 创建的,第二个是通过将 UIViewController 放入 InterfaceBuilder 中创建的。

我的问题是,即使我为第二个 VC 提供了一个自定义类并将标头导入到第一个 VC 中,但当我以编程方式创建第二个 VC 时,它不符合我在 InterfaceBuilder 中设置的设计。第一个可以。

我创建第二个 VC 的代码是这样的(它在 ImagePickerControllerDelegate 方法中):

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    UIImage *chosenImage = [info objectForKey:UIImagePickerControllerEditedImage];

    NCPhotoViewController *newController = [[NCPhotoViewController alloc] init];
    newController.theImage = chosenImage;
    ** NEW CODE newController.theImageView.image = newController.theImage;

    [self dismissViewControllerAnimated:YES completion:^{
        [self presentViewController:newController animated:YES completion:NULL];
    }];

...这看起来不错,并且可以满足我的要求 - 带来了一个新的视图控制器。问题是,它不会加载我在 IB 中设置的布局。alloc] init]我尝试将方法交换为initWithNibName:bundle:但意识到我没有笔尖......有没有一种方法可以在不创建 .xib 文件的情况下在 IB 中建立这种连接,或者我误解了 Xcode 5 的新流程?我知道 Identity Inspector 中有一个 Storyboard ID 属性,但是我该如何利用它来发挥我的优势呢?如果默认情况下没有将它们放在那里,我不想以“旧方式”做事...

TL;DR - 我希望我的 IB 布局 ViewController 在 Xcode 5 默认情节提要流程中以编程方式调用时看起来像预期的方式。

添加了一些代码,使新的viewcontroller的imageview有图像,但是没有出现...

编辑:我必须在我的新 viewcontroller.h 文件中添加self.theImageView.image = theImage;viewDidLoad方法 - 但它不应该已经用我编写的代码做到这一点吗?

4

1 回答 1

5

如果您在情节提要中设置控制器,则应该从中加载它。如果您的代码已经在同一个故事板的某个控制器中,您可以通过以下方式执行此操作:

UIStoryboard *sb = self.storyboard;
NCPhotoViewController * newController = [sb instantiateViewControllerWithIdentifier:@"SomeIdentifier"];
...

您还需要将视图控制器的 Storyboard ID 设置为“SomeIdentifier”,以便 Storyboard 知道要实例化哪个控制器。以下是它在 IB 的实用程序窗格中的外观: 在此处输入图像描述

于 2013-09-24T08:29:16.033 回答