Dismissviewcontroller and perform segue

2019-06-25 13:03发布

I need to go to another viewcontroller with performSegueWithIdentifier but I also need to remove the viewcontroller I'm currently in. How can I do this, I have tried this but it doesn't work:

[self performSegueWithIdentifier:@"next" sender:self];
[self dismissViewControllerAnimated:NO completion:nil];

//tried the other way, but it doesn't work either
[self dismissViewControllerAnimated:NO completion:nil];
[self performSegueWithIdentifier:@"next" sender:self];

It looks like there isn't any easy way to do this? I have 4 viewcontrollers, they are connected like this, and I want to go from gameover to highscore.

menu-->game----->gameover
menu-->highscore

4条回答
在下西门庆
2楼-- · 2019-06-25 13:29

I had the same problem until I realized I should use a push segue instead.
The New VC will dismiss them both at once.

查看更多
3楼-- · 2019-06-25 13:41

How about this?

UIViewController *parentController = self.presentingViewController;
[picker dismissViewControllerAnimated:YES completion:^(void){
    [parentController performSegueWithIdentifier:@"next" sender:self];
}];
查看更多
\"骚年 ilove
4楼-- · 2019-06-25 13:42

I had the same problem, this is what I did to resolve if anyone comes here looking for answers.

//In viewController that is being dismissed
[self dismissViewControllerAnimated:NO completion:^{
     [[NSNotificationCenter defaultCenter] postNotificationName:@"callSegue" object:self];
}];


//In viewController being presented
//in viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver: self
                                             selector: @selector(gotoNewView)
                                                 name: @"callSegue"
                                               object: nil];

-(void)gotoNewView {
    [self performSegueWithIdentifier:@"segueToPerform" sender:self];
}
查看更多
贪生不怕死
5楼-- · 2019-06-25 13:49

Even better:

[self dismissViewControllerAnimated:NO completion:^(void)
{
 // Perform the segue here.
}];
查看更多
登录 后发表回答