我一直在尝试使用新的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
- 但它不应该已经用我编写的代码那样做了吗?
答案 0 :(得分:5)
如果您在故事板中设置控制器,则应从中加载它。如果您的代码已经在同一个故事板的某个控制器中,您可以通过以下方式执行此操作:
UIStoryboard *sb = self.storyboard;
NCPhotoViewController * newController = [sb instantiateViewControllerWithIdentifier:@"SomeIdentifier"];
...
您还需要将视图控制器的Storyboard ID设置为“SomeIdentifier”,以便storyboard知道要实例化哪个控制器。以下是IB在“工具”窗格中的显示方式: