【问题标题】:Xcode 5 Storyboard created UIViewController layout not being called when creating new VC programmatically以编程方式创建新 VC 时未调用 Xcode 5 Storyboard 创建的 UIViewController 布局
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

  • 效果很好,感谢您的出色回答。我现在确实遇到了一个问题,即我尝试以编程方式设置的 UIImageView 没有出现在新加载的 ViewController 中,但我可能会继续解决这个问题。
  • 我添加了更多代码来突出我的进一步问题 - 如何使图像出现在新视图控制器的图像视图中 - 我得到的只是一个空白的新视图控制器
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
  • 2011-12-24
相关资源
最近更新 更多