0

自从故事板发布以来,我已经很久没有使用 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 变量

4

4 回答 4

1

您必须保留对 dyf_FacebookViewController 对象的引用,因此您可以执行以下操作:

- (IBAction)close:(id)sender {
    [controller.view removeFromSuperview];
}

您现在正在做的是从其超级视图中删除您的主视图,这可能会产生严重的后果,给您带来不好的访问权限。

于 2013-03-04T03:30:35.230 回答
0

如果要删除添加的视图,请保留视图控制器的副本...

// in this VC.m
@interface
@property (nonatomic, strong) dyf_FacebookViewController *dyfController;
@end

- (IBAction)buttonClickHandler:(id)sender {

    self.dyfController = [self.storyboard instantiateViewControllerWithIdentifier:@"Facebook"];
    [self.view addSubview:self.dyfController.view];
}

稍后,要关闭视图...

[self.dyfController.view removeFromSuperview];
于 2013-03-04T03:23:53.573 回答
0
if ([controller.view superView]) {
    [controller.view removeFromSuperview];
}
于 2013-03-04T03:33:46.447 回答
0

试试这个

- (IBAction)close:(id)sender {
for (UIView *subView in self.view.subviews) {
    [subView removeFromSuperview];
}
}
于 2013-03-04T04:20:05.197 回答