设置VC.view显示在不适合我的父VC视图中

时间:2012-12-21 13:53:21

标签: iphone objective-c ios

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

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

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

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

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

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

我做错了什么?我发誓过去我曾经做过10次,而且总是有效。 -.-我今天失踪了什么?

谢谢, -code

2 个答案:

答案 0 :(得分:1)

您正在实例化视图控制器,但实际上从未对其进行任何操作。如果您想以模态方式呈现它,请使用:

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

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

[[self view] addSubview:controller.view];

答案 1 :(得分: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];

是的,您需要将控制器存储在某处。如果您使用该视图并且未将控制器保留在任何位置,它将被释放并且您将开始进行错误的访问崩溃