从其超级视图中删除View会导致错误的访问错误XCODE

时间:2013-03-04 03:20:34

标签: objective-c uiview

自从我使用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];
}

不幸的是,返回时出现错误的访问错误。请帮忙!

由于

  • 迈克尔

编辑:

添加的子视图(子视图的viewcontroller)将控制其自身,因为它控制着子视图上的按钮。因此,我无权访问ViewControllerA中的原始controller.view变量

4 个答案:

答案 0 :(得分:1)

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

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

您现在正在做的是从超级视图中删除主视图,这可能会产生严重后果,从而导致您无法访问。

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

答案 2 :(得分:0)

if ([controller.view superView]) {
    [controller.view removeFromSuperview];
}

答案 3 :(得分:0)

试试这个

- (IBAction)close:(id)sender {
for (UIView *subView in self.view.subviews) {
    [subView removeFromSuperview];
}
}