【发布时间】:2013-03-04 03:20:33
【问题描述】:
自从故事板发布以来,我已经很久没有使用 addSubview 和 removeFromSuperview 了。显然我忘记了如何使用它们。
所以在我的 UIViewControllerA 上,我有一个按钮的代码:
- (IBAction)buttonClickHandler:(id)sender {
dyf_FacebookViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"Facebook"];
[self.view addSubview:controller.view];
}
加载由 UIViewControllerB 处理的 UIView。现在这个视图可以被许多不同的 ViewControllers 调用为子视图,这就是为什么我让它从父视图中删除。
所以在 UIViewControllerB 我有这个代码:
- (IBAction)close:(id)sender {
[self.view removeFromSuperview];
}
不幸的是,返回错误的访问错误。请帮忙!
谢谢
- 迈克尔
编辑:
添加的子视图(子视图的视图控制器)将控制删除自身,因为它控制子视图上的按钮。所以我无权访问 ViewControllerA 中的原始 controller.view 变量
【问题讨论】:
-
没有人问的问题是,如果您只是将其主视图添加到当前控制器,为什么还要实例化视图控制器?除非您有非常具体的理由这样做,否则这是一个很大的错误,并且在最近的 WWDC 会谈中已被广泛讨论。如果您正在使用视图控制器包含,您需要阅读更多关于它的信息,因为您做错了。最后,一个视图不能有两个超级视图,因此当您将 B 视图添加到 A 控制器时,B 控制器不再具有该视图集,因此当您调用它来删除视图时,会发生不好的事情。
标签: objective-c uiview