ответ

8

Да, вы не можете этого сделать. Я предполагаю, что вы сделали что-то вроде этого:

[self dismissModalViewControllerAnimated:YES]; 
[self presentModalViewController:myNewController animated:YES]; 

Это не работает. Я не знаю точно, почему, но это связано с анимациями, которые я считаю. Ваши варианты должны либо отклонить первый из них без анимации, либо еще ждать, чтобы представить новый в viewDidAppear родителя (или, возможно, viewDidDisappear для предыдущего модального представления, не уверен, что это работает).

+3

Причина, по которой это не работает, заключается в том, что контроллер просмотра игнорирует свою ссылку на модальный vc, когда анимация завершена. Поэтому он не думает, что у него есть другой контроллер представлений, чтобы представить модально больше. Оба предлагаемых вами решения будут работать. –

+2

В ответах, размещенных здесь, есть более подробная информация об этих двух подходах. http://stackoverflow.com/questions/3919845/presenting-a-modal-view-controller-immediately-after-dismissing-another/3919870#3919870 –

0

вы не можете отклонить два модальные контроллеры просмотра сразу после другого, кроме того, что другой плакат предложил, вы можете подождать небольшое количество времени, прежде чем отвергая другой модальный вид, например

[self performSelector:@selector(method) withObject:nil afterDelay:.5]; 

где метод называется просто отклоняет ваш другой вид модальности. Фрагмент кода выполняет селектор через 0,5 секунды и может использоваться, когда возникают проблемы синхронизации анимации, такие как тот, который вы описываете, чтобы разделить время вызова, чтобы они могли правильно выполняться.

+0

Это немного опасно (не так много), если анимация увольнения дольше, чем ваша задержка, ваш модальный vc все равно не появится. (И тайминги могут измениться с обновлениями к ОС.) Подходы Алекса невосприимчивы к этой проблеме. –