2014-12-11 2 views
2

После некоторого времени, требующего ответа, я должен признать, что я довольно запутался в этом случае.Есть ли способ отклонить текущий ViewController после представления другого?

В моей работе, я попросил, чтобы сделать что-то действительно конкретное:

Я должен представить UIViewController на предыдущем UIViewController, на самом деле, нынешний ViewController распускать себя перед вторым появится. Это придает смешной анимации, что ViewController идет вниз, а другой после этого снижается. Но ... На самом деле это не «профессионал», и мы можем видеть rootViewController за сценой во время анимации.

Итак, я должен точен, что никаких NavigationController, что сделал бы это намного проще, на мой взгляд, так что я вынужден сделать это с двумя UIViewController, и есть мой фактический код:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; 
     UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"userViewController"]; 
     [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:controller animated:YES completion:^{ 
      [self dismissViewControllerAnimated:YES completion:nil]; 
}];  

Это вызов сразу после нажатия кнопки, поэтому никаких проблем с фактическим ViewController viewDidLoad или viewDidAppear я не считаю.

Но каждый раз, когда этот код работает, я получаю следующее сообщение об ошибке:

[1163:17641] Warning: Attempt to present <UserViewController: 0x7b0f0a00> on <EIHomeViewController: 0x7b0d2a00> whose view is not in the window hierarchy! 

Я не знаю, как мне удалось сохранить следы текущего UIViewController, чтобы отклонить его в следующем ViewController viewDidAppear чтобы быть уверенным, что на экране не будет «затемнения».

Благодарим за помощь!

ответ

0

Попробуйте этот код:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Storyboard" bundle:nil]; 
UIViewController *controller = [storyboard instantiateViewControllerWithIdentifier:@"userViewController"]; 
[self dismissViewControllerAnimated:NO completion:^{ 
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:controller animated:NO completion:nil]; 
}]; 
+0

У меня был один и тот же код, как до, за исключением, что распускать был Animated, всегда это «затемнение» между двумя ViewController, плюс у меня нет больше " поднимается "анимация. Но да, это в значительной степени уменьшает задержки. Но я ищу что-то, что позволяет мне добавить ViewController на другой, чтобы отклонить этот другой вид после нового ViewController viewDidAppear. : s –

+0

Но если вы представляете следующий vc из текущего vc, у вас будет стек вроде: root-> current-> next. Если теперь вы вызываете 'rejectViewControllerAnimated' на текущем (next's presentingViewController), следующий также исчезнет. –

+0

Невозможно вызвать следующий корень? Как взломать из стека или с другим слоем, который заставляет его появляться поверх экрана? –

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