0

我正在尝试做一些非常简单的事情,所以我使用 SingleViewApplication 模板创建了一个测试项目。

在 ViewController.xib 中,我向主视图添加了一个子 UIView。我创建了一个 UIView 类型的 IBOutlet 并将其链接到 XIB 中的该视图。

我创建了一个名为 TVC 的第二类和 xib,并将它的背景颜色更改为蓝色,以便在它出现时很明显。

在 ViewController.m 中,我开始制作 TVC,如下所示:

self.childView = [[TVC alloc] initWithNibName:@"TVC" bundle:nil].view;

但没有任何改变。我在 TVC 方法 initWithNibName 中设置了一个断点,它确实被调用了。

我做错了什么?我发誓过去我已经这样做了 10 次,并且一直有效。-.- 我今天错过了什么?

谢谢,-代码

4

2 回答 2

1

您正在实例化视图控制器,但实际上从未对它做任何事情。如果您想以模态方式呈现它,请使用以下命令:

UIViewController *controller = [[TVC alloc] initWithNibName:@"TVC" bundle:nil];
[self presentViewController:controller animated:YES completion:nil];

或者,如果您只想将新的控制器视图添加到当前视图,则需要使用:

[[self view] addSubview:controller.view];
于 2012-12-21T13:57:34.150 回答
0

让我们分解一下。

您的第一个 XIB 创建您的控制器,创建它的 childView 并在您创建第一个控制器时自动将其添加为子视图。

然后创建第二个控制器,获取它的视图并将其分配给 childView。

窗帘后面发生了什么?您的父视图控制器仍然将原始 childView 添加为子视图,并且由于您从未这样做过[self.view addSubview:self.childView];,因此您的 TVC.view 将永远不会显示。

如何使它工作: 为了使它工作,你需要从你的父控制器的xib中取出你的childView,IBOutlet如果你愿意,你可以从属性中删除标签。然后,添加以下代码:

self.tvc = [[TVC alloc] initWithNibName:@"TVC" bundle:nil];
self.childView = [[TVC alloc] initWithNibName:@"TVC" bundle:nil].view;
[self.view addSubview:self.childView];

是的,您需要将控制器存储在某个地方。如果您使用视图并且不在任何地方保留控制器,它将被释放并且您将开始遇到错误的访问崩溃

于 2012-12-21T13:58:40.553 回答