Xcode 5 Storyboard在以编程方式创建新VC时未创建UIViewController布局

时间:2013-09-24 08:23:52

标签: ios uiviewcontroller interface-builder storyboard xcode5

我一直在尝试使用新的xcode 5 storyboard范例,而不是专门创建.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:,但意识到我没有笔尖...有没有办法在IB中建立这种连接而不创建.xib文件,或者我有误解了Xcode 5的新流程?我知道Identity Inspector中有一个Storyboard ID属性,但是如何使用它呢?如果他们没有被默认放在那里,我不想做“旧方式”......

TL; DR - 我希望我的IB布局的ViewController能够在Xcode 5默认故事板流程中以编程方式调用它的方式。

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

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

1 个答案:

答案 0 :(得分:5)

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

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

您还需要将视图控制器的Storyboard ID设置为“SomeIdentifier”,以便storyboard知道要实例化哪个控制器。以下是IB在“工具”窗格中的显示方式:  enter image description here