一次删除2个子视图

时间:2011-01-08 15:45:57

标签: iphone objective-c uiview subview

我正在尝试使用一种方法删除两个viewcontrollers(已经相互添加)。我在interfacebuilder中创建了视图。他们都有自己的.h和.m文件。

我在的情景:

我有一个主菜单,其中导入了view2头文件。 在一个方法中,我在超级视图的顶部添加第二个视图,如此

view2ViewController * view2 = [[view2ViewController alloc] initWithNibName:@"view2ViewController" bundle:nil];
[self.view addSubview:view2.view];

然后在视图2中我添加了视图3头文件,因此我可以将视图3添加为view2的子视图。我有另一种方法再次连接到界面构建器到UIButton,所以在按下按钮时,在view2中调用一个方法,它以完全相同的方式在顶部添加视图3:

view3ViewController * view3 = [[view3ViewController alloc] initWithNibName:@"view3ViewController" bundle:nil];
[self.view addSubview:view3.view];

我试图解决的问题: 我在视图3中有一个按钮,它应该删除视图3 ....然后它也应该删除视图2以便主屏幕可见。

如何实现这一目标?

到目前为止我有什么:

[self.view removeFromSuperview];

然而,这只会移除View 3 ...但会将视图2留在原位。

需要修改什么才能删除视图2

感谢任何帮助。

3 个答案:

答案 0 :(得分:1)

我通常会将view2和view3添加为主视图的子视图。然后,当触发按钮操作时,主视图的视图控制器将执行子视图的添加和删除。

对于快速黑客攻击,我认为您可以在按钮处理程序中尝试此操作。

[self.view removeFromSuperview];
[self.view.superview removeFromSuperview];

虽然我不确定你是否应该这样做。 :P

答案 1 :(得分:0)

这是你需要的吗?

    [[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)];

答案 2 :(得分:0)

我不知道你要做什么,但我得到的印象是推动一个新的视图控制器是你想要的。如果你的应用程序中有UINavigationController,你只需要做一个

[navigationController pushViewController:view2 aimated:YES]

要在按下按钮时返回主菜单,您应该定义一个看起来像这样的委托协议::

@protocol View3ViewControllerDelegate
- (void)view3ControllerBackToMainMenuButtonPressed:(View3ViewController*)controller;
@end

然后,该协议由实际推送其他视图控制器的类实现。在实现中,您将弹出所有不想再显示的视图控制器。为此,您可以使用

[navigationController popToViewController:myMainMenuViewController animated:YES]

或者如果您的主菜单视图控制器实际上是根视图控制器:

[navigationController [navigationController popToRootViewControllerAnimated:YES]

这样只有一个类负责推送和弹出所有视图控制器并处理“返回主菜单”按钮。使用如上所述的自定义协议是在这种情况下处理弹出的视图控制器的推荐方法。

希望有所帮助!