UIView呈现黑屏,修复?

时间:2012-05-13 19:59:32

标签: iphone ios xcode cocoa-touch cocoa

我将View调用以下代码:

#import "infoView.h"
...
infoView *viewInfo = [[infoView alloc] initWithNibName:nil bundle:nil];
viewInfo.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:viewInfo animated:YES];

但是当它在运行时呈现时,加载的视图变黑。 目前我正在使用故事板,但我需要使用这个代码,因为在我的情况下它更有效率,因为我正在处理多个视图!

如果我通过StoryBoard连接它,它可以正常工作。

我应该看到2个标签,1个UITextView和2个UIButton。

视图是使用StoryBoard创建的,当创建视图的.m和.h文件时,我没有为它添加.xib。它也通过StoryBoard中的“自定义类”部分链接。

谢谢,希望有人可以提供帮助!

1 个答案:

答案 0 :(得分:5)

嘲笑那些花时间和精力帮助你的人通常都是非常糟糕的形式。

命名非常重要,它使您的代码更易于使用,并允许其他人使用它。不遵循您所使用的语言的约定是危险的,这意味着您的代码与其他开发人员不兼容,因为事情的解释不同。

如果您查看UIViewController的文档,您会在initWithNibName:bundle:方法说明中看到此说明

  

如果您的应用使用故事板定义视图控制器及其关联视图,则您的应用永远不会直接初始化该类的对象。相反,视图控制器要么由故事板实例化 - 要么在触发segue时由iOS自动实现,要么在应用程序调用storyboard对象的instantiateViewControllerWithIdentifier:方法时以编程方式实例化。从故事板实例化视图控制器时,iOS会通过调用其initWithCoder:方法来初始化新视图控制器。 iOS会自动将nibName属性设置为存储在故事板内的nib文件。

因此,您实例化控制器错误,故事板应该实例化它。这样做(命名已更正)

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:[NSBundle bundleForClass:[self class]]];
InfoViewController *infoViewController = [storyboard instantiateViewControllerWithIdentifier:@"InfoViewController"];
infoViewController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self infoViewController animated:YES];

旁注

infoView是一个糟糕的名字,不仅因为你没有从资本开始,而且因为它完全是欺骗。阅读此内容的任何人都会认为InfoViewUIView而不是UIViewController的子类。