删除当前的子视图ios

时间:2012-07-22 15:48:50

标签: ios cocoa uibutton subview

我有一个应用程序,加载时,加载基于选项卡的应用程序,所有选项卡都正常工作。在第一个选项卡中,加载的视图有一大堆按钮。我已经编写了这些按钮的方法,所以当按下它们时会推送一个新的子视图(.xib),这样可以正常工作。

但是,在这些新的子视图中,我有一个后退按钮,它有自己的方法。我希望此按钮删除视图并返回到原始视图。这是FirstViewController.m的代码。

请记住,即使文件处理不同的.xib文件,此文件仍包含所有代码。基本上它首先推送FirstView,然后按下按钮它将推送E87view.xib,.xib的代码仍然在firstviewcontroller文件中。

-(IBAction) backButtonPressed {
    [self showAll];
    backButton.hidden = 1;

    for (UIView *subview in [self.view subviews]) {
        [subview removeFromSuperview];
    }
    [self showAll];
}

-(IBAction) E87Pressed {
    //[self hideAll];

    E87view *e87view = [[E87view alloc] initWithNibName:@"E87view" bundle:[NSBundle mainBundle]];

    [self.navigationController pushViewController:e87view animated:YES];
    [self.view addSubview:e87view.view];
}

所以重申一下,当我按下加载FirstView.xib的第一个视图上的按钮E87时,它将推送新视图E87view.xib。但是,当我按下新加载的E87view上的后退按钮时,它将访问上述功能并删除视图,但也删除了FirstView.xib的所有设置,基本上留给我一个空的应用程序。

希望这有道理我可以絮絮叨叨。

此致

路易斯

2 个答案:

答案 0 :(得分:2)

只需使用

从导航控制器中删除ViewController,而不是删除每个子视图
[self.navigationController popViewControllerAnimated: YES];

这条线是不必要的

[self.view addSubview:e87view.view];

答案 1 :(得分:0)

看着你的代码,有些事让我感到困惑:

1)为什么在将视图控制器推送到屏幕后,将viewController e87view的子视图再次添加到主视图?在推送viewController e87view时,应该为您处理所有事情。 viewController将添加到navigationController堆栈中,并且还应该显示viewControler的视图。

所以打电话

[self.navigationController pushViewController:e87view animated:YES];

[self.view addSubview:e87view.view];

会将您的观点两次添加到屏幕上。

2)为什么要编写自己的代码进行导航?虽然这个可以完成..你确定这是你想做的吗?通常在将viewController e87view推送到navigationController后,会自动为您显示一个后退按钮如果你的viewController e87view有一个标题