我正在尝试做一些非常好的事情,所以我用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
答案 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];
是的,您需要将控制器存储在某处。如果您使用该视图并且未将控制器保留在任何位置,它将被释放并且您将开始进行错误的访问崩溃