Как представить второй ViewController и отклонить первый - PullRequest
9 голосов
/ 07 марта 2012

используя следующий код в родительском ViewController, я хочу представить второй вид поверх первого, затем отклонить первый:

// Animates the next questionViewController using the first questionViewController
[previousView presentViewController:nextQuestionViewController animated:YES completion:nil];

// Dismiss the first questionViewController
[previousView dismissViewControllerAnimated:NO completion:nil];

При запуске отображается второе представление, но первоевид не уволят.

Ответы [ 5 ]

12 голосов
/ 08 мая 2012

Вам нужно будет сначала закрыть «предыдущий вид», а затем представить «следующий вид доступа»:

// Dismiss the first questionViewController
[previousView dismissViewControllerAnimated:NO completion:nil];

// Animates the next questionViewController using the first questionViewController
[previousView presentViewController:nextQuestionViewController animated:YES completion:nil];
4 голосов
/ 07 марта 2012

попробуй

[self dismissViewControllerAnimated:NO completion:nil];

если это не так:

[self.navigationController popViewControllerAnimated:YES];
2 голосов
/ 19 декабря 2013

Я сделал следующее (self - ваш старый контроллер):

UIStoryboard *storyboard = self.storyboard;

[self dismissViewControllerAnimated:YES
                         completion:^{
        UIViewController *newController = [storyboard instantiateViewControllerWithIdentifier:@"newControllerStoryboardId"];
        newController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

        [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:newController animated:YES completion:nil];
    }];
0 голосов
/ 11 января 2019

Может быть лучше использовать «раскрутить»:

https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/UsingSegues.html#//apple_ref/doc/uid/TP40007457-CH15-SW8

https://developer.apple.com/library/archive/technotes/tn2298/_index.html

Позволяет одновременно отключать несколько контроллеров представления без необходимости знать, сколько их в стеке. И без того, чтобы представленный контроллер представления обладал специальными знаниями о том, куда он должен вернуться обратно (т.е. вам не нужно напрямую обращаться к корневому контроллеру представления окна).

Допустим, у вас есть некоторый контроллер корневого представления, называемый VC1, первый модальный - VC2, а второй модальный - VC3.

В VC1 вы бы реализовали IBAction, называемый (например) unwindToRoot. Затем в раскадровке для VC3 вы подключаете кнопку «Готово» к объекту Exit и выбираете действие unwindToRoot.

Когда эта кнопка нажата, система отключит все контроллеры представления, необходимые для возврата вас к VC1.

Таким образом, в основном вы просто позволяете всем этим VC складываться, а когда вы все закончите, вы отбрасываете все, чтобы вернуться к корневому VC.

0 голосов
/ 09 августа 2017

Кажется, что невозможно перейти от B к C без краткого отображения A, что выглядит непрофессионально. Тем не менее, вы можете поместить черное подпредставление поверх A, пока вы не анимируете на C.

Код см. В моем ответе https://stackoverflow.com/a/45579371/218226

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...