2014-03-21 1 views
0

У меня странная проблема при отключении двух modalviewcontrollers.Отключение двух существующих ModalViewControllers (MPMediaPickerController и UIViewController) в то же время

То, что я делаю, у меня есть viewControllers A и B. Я presentingmodalviewController B на A. а затем BI Представляю MPMediaPickerController на B. Теперь мой вопрос После нажатия на кнопку Готово в MPMediaPickerController его метод делегата звонит , Я применил приведенный ниже код, чтобы отклонить MPMediaPickerController и контроллер B, чтобы мы могли напрямую перейти к контроллеру A.

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{ 
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES]; 
} 

же код работает для ViewControllers A, B и C, но не работает, если третий один MPMediaPickerController

Любые идеи или предложения очень полезны.

ответ

1

Всякий раз, когда вы представляете MPMediaPickerController с контроллера, вы должны установить его делегат для контроллера представления. Так как потому, что метод делегата находится внутри контроллера представления представления, вам нужно вызвать rejectModalViewControllerAnimated вместо того, что вы делаете. Я просто передаю параметр bool в НЕТ, потому что всякий раз, когда вы попытаетесь уволить больше одного контролера одновременно, в это время произойдет несбалансированный переходный вызов iOS, и это может помешать другому вызову. Поэтому я просто отклонил MPMediaPickerController без анимации и представления контроллера представления с анимацией.

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{ 
    [self dismissModalViewControllerAnimated:NO]; 
    [self.presentingViewController dismissModalViewControllerAnimated:YES]; 
} 
+0

При ответе на вопросы, что это хорошая идея, чтобы объяснить код столбу. – Tony

+0

Спасибо, мне это помогло – SRI

0

Вы пробовали следующие коды?

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{ 
    [mediaPicker dismissModalViewControllerAnimated:NO]; 

    [self dismissModalViewControllerAnimated:YES]; 

} 

Thanks!

2

Почему вы используете метод dismissModalViewControllerAnimated? Он устарел, вместо этого используйте dismissViewControllerAnimated.

Проверьте этот код:

- (void)mediaPicker:(MPMediaPickerController *)mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection 
{ 
    [self dismissViewControllerAnimated:YES completion:^{ 
     [[self presentingViewController] dismissViewControllerAnimated:YES completion:nil]; 
    }]; 
}