从superview中删除Button Click事件上的ViewController

时间:2011-09-02 07:09:36

标签: uiviewcontroller

我正在尝试使用一种方法删除两个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?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

实际上,添加任何视图的方式与删除该视图的方式相同。假设您通过将视图推入导航控制器(如此

)来添加视图
    [self.navigationController pushViewController:yourViewController animated:YES];

然后你需要将它写入yourViewController.m文件

    //inYourViewController.m file
    [self.navigationController popViewControllerAnimated:YES];  

新编辑:

好的,假设你做了presentModalViewController,那么就这样做。

现在,您想要转到view1而不是view2的第二个问题。在AppDelegate中创建一个布尔变量。在View3中按完成按钮时设置它。

    //inYourAppDelegate.h
    BOOL doneBtnClicked = NO;

    //inYourViewController3.m
    - (IBAction) doneBtnPressed : (id) sender
    {
            //your code
            yourAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
            appDelegate.doneBtnClicked = YES;
  >>CHANGE THIS     [self.view removeFromSuperview];
    }

现在,在view2中,在viewWillAppear方法

    - (void) viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
            //your code
            yourAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
            if(appDelegate.doneBtnClicked)
            {
                     appDelegate.doneBtnClicked = NO;
     >>AND THIS      [self.view removeFromSuperview];
            } 
    }

但是,在UINavigationController的帮助下,你想要做的事情非常容易。我建议你做导航的帮助,因为在内存管理方面真的很容易而且导航控制器仅用于此目的。