【发布时间】:2013-09-29 08:43:06
【问题描述】:
我一直在尝试使用新的 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 文件的 viewDidLoad 方法中添加 self.theImageView.image = theImage; - 但它不应该已经用我编写的代码做到这一点吗?
【问题讨论】:
-
你需要用frame创建viewController。
-
即使在您创建了视图控制器之后,它的视图和视图层次结构也可能不会被创建,直到您显式访问视图(例如,直到控制器即将显示)。所以UI元素的所有初始化都应该在viewDidLoad或者viewWillAppear中进行:方法
-
感谢您的精彩解释!
标签: ios uiviewcontroller interface-builder storyboard xcode5