所以我在故事板中有3个视图控制器,(VC1,VC2和VC3)。
每个视图都有一个调用IBAction的按钮,该按钮调用此方法以模态转换到另一个视图:
[self doSegue: myViewController_ID];
-(void) doSegue:(NSString *)_myViewController_ID
{
//get UiViewController from storybord with Unique ID
UIStoryboard *storyboard = self.storyboard;
UITableViewController *svc = [storyboard instantiateViewControllerWithIdentifier:_myViewController_ID];
//set presentation & transition styles
svc.modalPresentationStyle = UIModalPresentationFullScreen;
svc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
//do segue
[self presentViewController:svc animated:YES completion:nil];
}
让我设置从VC1到VC2,一次在VC2
我想要的是删除以前的ViewController(VC1)。 如果我现在从VC2转到VC3,我希望从视图层次结构中移除或堆叠VC2,依此类推。
这是因为我不会提供[self dismissViewControllerAnimated:YES completion:nil];
方法
由于堆栈中所有视图控制器的累积,我不希望内存增长。
注意:我不会使用导航控制器或标签控制器,只使用视图控制器。
感谢您的帮助。
答案 0 :(得分:4)
只是一个猜测,我没试过......
在VC2上保留VC1的参考 - >使用prepareForSegue发送它:
然后在VC2上
[self.previousViewController willMoveToParentViewController:nil];
[self.previousViewController removeFromParentViewController];
只是为了确保在View Controller上插入
- (void)dealloc
{
NSLog(@"dealloc: %@", self);
}
并查看控制台
编辑: 您可以在收到内存警告时执行此操作,而不是在segue之后删除每个视图控制器。您也可以尝试使用dismissViewControllerAnimated:completion:在segue之后
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
// ???
if ([self isViewLoaded] && self.view.window == nil) {
NSLog(@"UNLOADING");
self.view = nil;
[self dismissViewControllerAnimated:NO completion:nil];
}
}