0

我有一个应用程序,加载时会加载一个基于选项卡的应用程序,所有选项卡都可以正常工作。然而,在第一个选项卡中,加载的视图有一大堆按钮。我已经编写了这些按钮的方法,所以当按下它们时,它们会推送一个新的子视图(.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];
}

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

希望这是有道理的,我可以闲逛一下。

问候,

刘易斯

4

2 回答 2

2

而不是删除每个单独的子视图,只需使用从导航控制器中删除 ViewController

[self.navigationController popViewControllerAnimated: YES];

这条线是不必要的

[self.view addSubview:e87view.view];
于 2012-07-22T16:03:52.680 回答
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 有一个title ,则会自动为您显示一个后退按钮。

于 2012-07-22T17:23:35.890 回答