我正在尝试使用一种方法删除两个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?
感谢任何帮助。
答案 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的帮助下,你想要做的事情非常容易。我建议你做导航的帮助,因为在内存管理方面真的很容易而且导航控制器仅用于此目的。