1

我调用一个视图来显示以下代码:

#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 中的“自定义类”部分链接。

谢谢,希望有人可以帮忙!

4

1 回答 1

5

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

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

如果您查看UIViewController的文档,您将在initWithNibName:bundle:方法描述中看到此注释

如果您的应用程序使用情节提要来定义视图控制器及其关联视图,则您的应用程序永远不会直接初始化该类的对象。相反,视图控制器要么由故事板实例化——要么在触发 segue 时由 iOS 自动实例化,要么在您的应用程序调用故事板对象的 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对班级来说是一个坏名字,不仅因为你没有以大写开头,而且因为它完全是骗人的。任何阅读本文的人都会认为它InfoViewUIViewnot的子类UIViewController

于 2012-05-13T23:51:26.750 回答