2012-03-07 2 views
9

используя следующий код в родительском ViewController, я хочу представить второй вид ONTOP из первого, а затем уволить первый:Как представить второй 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]; 

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

+0

previousView является ViewController на стек навигации контроллера или отображалось модально? –

+0

Да, он отображается в текстовом формате. Я не могу понять, почему он не уйдет. –

+0

Из вашего кода он говорит только presentViewController: анимированный, не присутствуетModalViewController: анимированный –

ответ

12

Вы должны сначала уволить "previousView" & затем представить "nextQuestionViewController":

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

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

В результате этого ответа возникает следующее исключение: «Завершение приложения из-за неперехваченного исключения» NSInvalidArgumentException », причина:« Приложение попыталось представить модально активный контроллер . '' – Benjamin

+0

Не думаете ли вы, что это будет ошибка склонный использовать контроллер вида, чтобы представить другого, зная, что он сам будет освобожден в какой-то момент времени. Я предпочел бы использовать '[[UIApplication sharedApplication] .keyWindow.rootViewController' или аналогичный существующий' nextQuestionViewController', как это было предложено @Mozilla. – atulkhatri

4

попробовать

[self dismissViewControllerAnimated:NO completion:nil]; 

неудачу, что:

[self.navigationController popViewControllerAnimated:YES]; 
+0

Я снова пытаюсь решить эту проблему - использование обоих этих методов не позволяет уволить второго viewController, после представления первого - я пропустил что-то еще? –

+0

Как говорит Рафаэль, вы должны представить второй viewController следующим образом: [previousView presentModalViewController: nextQuestionViewController animated: YES]; – ader

2

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

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]; 
    }]; 
-1

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

Для кода, увидеть мой ответ на https://stackoverflow.com/a/45579371/218226

Смежные вопросы