在模态segue之后删除最后一个UIViewController

时间:2012-10-12 22:02:55

标签: iphone objective-c ios xcode ipad

所以我在故事板中有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];方法

由于堆栈中所有视图控制器的累积,我不希望内存增长。

注意:我不会使用导航控制器或标签控制器,只使用视图控制器。

感谢您的帮助。

1 个答案:

答案 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];
    }
}