Независимо от системы:
my_multiline_text.replace(/$/mg,'<br>');
addChildViewController
, чтобы добавить ContentPortraitVC
: a. ContentPortraitVC
получает свой набор свойств parentViewController
. б. После этого (согласно документации Apple) необходимо вручную отобразить представление ContentPortraitVC
. Если вы следуете документации, вы делаете это, добавляя ее как дочерний элемент верхнего уровня ControllerVC
. ContentPortraitVC
вызывает presentViewController
для отображения ContentModalDetailVC
. а. Это устанавливает его свойство presentingViewController
(в отладчике это показано как _parentModalViewController
ivar - примечание, что ivar отличается от свойства) и устанавливает свойство presentedModalViewController
для ContentPortraitVC
(у кого есть ivar _childModalViewcontroller
]). б. Взгляды мудрым, на iPhone, представление ContentModalDetailVC
полностью заменит представления из ContentPortraitVC
и ContainerVC
, поэтому будет видно только вид диспетчера режима просмотра. (на iPad он накладывает новый пользовательский интерфейс поверх вершины, но как родной вид ControllerVC
, который, в свою очередь, является родителем представления ContentPortraitVC
. ContentPortraitVC
к ContentLandscapeVC
. а. IOS делает немного магии. Он знает, что вещь, которую вы удаляете (ContentPortraitVC
) имеет активную presentedViewController
, поэтому она меняет родителя. Он устанавливает значение nil
на ContentPortraitVC
, принимает дочерний элемент (ContentModalDetailVC
) и устанавливает родительский элемент в новое представление (ContentLandscapeVC
). Итак, теперь контроллер вида, который представил модальный вид , уже не является его представлением контроллера представления . Это как если бы ContentLandscapeVC
представило его в первую очередь! б. Что касается взглядов, вы следуете документам Apple, чтобы изменить их с ContentPortraitVC
на ContentLandscapeVC
. Но вы просто меняете представления в представлении ControllerVC
. На iPhone контроллер модального просмотра остается единственным, что отображается, поэтому изменение ничего не делает на экране. На iPad это происходит (хотя вы, вероятно, этого не увидите, поскольку модальное представление обычно полноэкранное). ContentPortraitVC
, но больше не ссылаетесь на то, что он представил. Поэтому вызов [self dismissViewController...
ничего не делает, потому что ContentPortraitVC
больше ничего не представляет, ответственность за это была передана ContentLandscapeVC
. Так вот что происходит и почему. Вот, что с этим делать.
ContentPortraitVC
на ContentLandscapeVC
, так что последний тот, который пытается отклонить модальный контроллер. [self dismissModalControllerAnimated:YES completion:nil]
. Я собираюсь спросить и ответить на другой вопрос о том, почему это работает (как IOS знает, что увольнять?), Если это кажется странным. ControllerVC
тот, который всплывает модальный вид и нести ответственность за его удаление. Если вы проверите presentingViewController
на ContentModalDetailVC
, вы увидите, что он фактически представлен ContainerVC
, а не ContentPortraitVC
.
Чтобы исправить это, вам просто нужно установить definesPresentationContext
(или установите флажок «Определяет контекст» в Interface Builder) на ContentPortraitVC
.
Это позволит ContentPortraitVC
обрабатывать модальную презентацию вместо того, чтобы передавать цепочку ответчиков на следующий контроллер представления, который определяет контекст представления (по умолчанию контроллер корневого представления).
Вероятно, вы захотите ContentLandscapeVC
также определить контекст, чтобы избежать такой же проблемы.
Когда оба дочерних контроллера определяют свой собственный контекст представления, когда ContainerVC
решает обменять детей, любой модальный модал будет удален из новой иерархии вместе с дочерним элементом, который его представил. Нет необходимости делать взломанные вещи, чтобы попытаться уволить их перед заменой:)
Изменить: Я должен добавить, что представленный диспетчер представлений должен иметь свой modalPresentationStyle
Установить либо currentContext
или overCurrentContext
,
presentedViewController
на текущем контроллере дочерних представлений и вместо этого заменяя этот вид. Разве это нарушит дизайн? – kolizz 19 April 2015 в 18:38