删除当前子视图ios

问题描述:

我有一个应用程序,加载时,加载基于选项卡的应用程序,从而所有标签工作正常。然而,在第一个选项卡中,加载的视图有一大堆按钮。我已经写了这些按钮的方法,所以当按下时,他们推动一个新的子视图(.xib),这工作正常。删除当前子视图ios

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

请记住,即使它处理不同的.xib文件,该文件仍保留所有代码。基本上它首先推动FirstView,然后当按下按钮时,它将推动E87view.xib,.xib的代码仍在第一个viewcontroller文件中。

-(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]; 
} 

所以只是重申一下,当我按下按钮E87上的加载FirstView.xib这将推动新的视图E87view.xib第一种观点。但是,当我按下这个新加载的E87view上的后退按钮时,它将访问上述功能并删除视图,但也会从FirstView.xib中删除所有设置,实际上留给我一个空应用程序。

希望这是有道理的,我可以漫步一下。

问候,

路易斯

+0

在你说的文字中,你使用了一个tab控制器。你的代码说你正在使用导航控制器。您是在一个选项卡中使用导航控制器还是选项卡控制器出错? – Pfitz 2012-07-23 06:35:59

+0

不,它是一个选项卡式应用程序,委托确实有一个tabBarController。 – 2012-07-23 12:09:28

相反除去每个单独的子视图,只是使用

[self.navigationController popViewControllerAnimated: YES]; 

导航控制器移除的ViewController而且这条线是不必要

[self.view addSubview:e87view.view]; 
+0

我假设你的意思是添加行 [self.navigationController popViewControllerAnimated:YES]; 到后退按钮?它不起作用。而增加的视图行是当按下e87时将视图带到前面的。 – 2012-07-22 16:16:31

+0

您确实不需要将e87view.view添加为子视图,导航控制器将在调用pushViewController:animated:时显示viewController的视图。当您调用popViewControllerAnimated时,会发生同样的事情:它将恢复为预览viewController视图。如果不起作用,问题可能来自其他地方。 – 2012-07-22 17:19:29

+0

对,我认为我们的电线越来越多。我的FirstViewController文件包含FirstView.xib上所有按钮的所有代码,以及我希望在其所在位置显示的每个视图,例如e87view.xib。该行, [self.view addSubview:e87view.view]; , 将子视图e87view带到前面,只有后退按钮,该视图为空白。后退按钮应该删除该视图。我如何删除该视图?后退按钮是一个按钮,我在那里放置了一个UIButton,它连接到FirstViewController中的上述函数。 – 2012-07-22 17:45:53

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

1)为什么要将viewController e87view的子视图再次添加到主视图之后将视图控制器推到屏幕上?在推送viewController e87view时,应该为你处理每件事情。 viewController将被添加到navigationController堆栈中,并且该viewControler的视图也应该被呈现。

所以调用

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

[self.view addSubview:e87view.view]; 

之后将两次添加视图到屏幕。

2)为什么要编写自己的代码来回溯?虽然这可以完成..你确定这就是你想要做的?通常在将viewController e87view推入导航控制器后,会自动出现一个后退按钮如果您的viewController e87view有一个标题

+0

不知道你的意思?我发布的代码是两个不同的功能。一个适用于E87按钮,另一个适用于出现在不同的后退按钮如果我注释掉这行[self.view addSubview:e87view.view],那么当我按下E87按钮时,什么都不会发生。 本质上,当我离开它时,那就是将E87view.xib带到前面的那一行。在这个新的xib中,我带了前面我添加了另一个UIButton,这个按钮连接到我的帖子中的第一个函数,我只是想要它删除视图,并返回到原始视图 – 2012-07-22 17:57:44

+0

帮助我理解这一点。因此,你有上面这段代码,它包含在** firstViewController **文件中,并且那个firstViewController是当你点击第一个Tab时加载的viewController,并且..那个backButtonPress ed方法处理从firstViewController的某个按钮加载的每个新视图的卸载? – 2012-07-22 18:11:21

+0

这样的事哈哈我混淆了我认为的东西,原谅我。正确的是,我现在所做的是在E87view.h/.m中声明并实现后退按钮。我已经添加了一个UIButton到E87view.xib。 对,就是这样。当应用程序启动时,它会调出MainWindow.xib和FirstView.xib,其后面的代码由FirstViewController类处理。在这个类中,当我按下UIButton E87时,它将E87view.xib推到屏幕上(维护标签),并且在这个xib上我有另一个UIButton链接到backButtonPressed函数,我刚搬到了E87view类。 – 2012-07-22 18:17:15