У меня относительно простой вопрос, который я не могу понять.
Я нахожусь внутри UIViewController (myViewController), который встроен где-то в иерархию UIViewController (где-то под родительским UITabBarController).
myViewController имеет кнопку. Когда эта кнопка нажата, я хочу наложить на весь экран (включая всю липкость родительского UITabBarController) черный полупрозрачный модальный UIViewController (myModalViewController) с другой липкостью на нем.
Если я просто позвоню
[myViewController presentViewController:myModalViewController..]
визуальные эффекты myViewController исчезают, как только переход завершен, тем самым побеждая точку полупрозрачного наложения.
Если я установлю myModalViewController в качестве дочернего контроллера представления myViewController и добавлю myModalViewController.view в качестве подпредставления myViewController.view, контроллер модального представления с полупрозрачным черным фоном появится ПОД всеми кнопками UITabBarController. Это плохо, потому что я хочу, чтобы весь экран был перекрыт.
Итак, вместо этого я ищу самый верхний контроллер представления в иерархии и добавляю myModalViewController в качестве его дочернего элемента следующим образом:
UIViewController* root = myViewController;
while (root.parentViewController) {
root = root.parentViewController;
}
[root addChildViewController:myModalViewController];
[root.view addSubview:myModalViewController.view];
Если это правильный способ справиться с этим сценарием? Кажется клёвым.
Кроме того, как мне заставить myModalViewController вести себя модально и поглощать все сенсорные жесты, чтобы весь пользовательский интерфейс под ним не реагировал на прикосновения? Прямо сейчас это так, и все мои попытки исправить это потерпели неудачу. Кроме того, myModalViewController и все UIViews в нем, похоже, не получают никаких сенсорных уведомлений, что бы там ни было.