Представить модальный ViewController из SubView - PullRequest
1 голос
/ 24 июня 2011

Я пытаюсь представить модальный контроллер вида C из контроллера вида B. Вид B не покрывает весь экран, а является подвидом другого контроллера вида A. Что я вижу, когда пытаюсь представить полноэкранный модальный видЭто то, что модальный экран покрывает весь экран, но когда я нажимаю на определенные места на экране, элемент управления будет «передан» на вид А.

Я могу обойти это, представив модал от А через какое-то делегирование, но я понятия не имею, почему это происходит!В конце концов, если у вас есть контроллер панели вкладок, управляющий одним из ваших представлений, и вы пытаетесь представить модальное представление, оно просто отлично покрывает весь экран.За кулисами происходит какая-то магия?

Ответы [ 3 ]

10 голосов
/ 24 июня 2011

Я не думаю, что существует какая-либо официальная документация о том, как реализован модальный режим, но любое представление может получить UIWindow UIApplication и вызвать -presentModal ... onсвойство rootViewController.Это будет иметь эффект сделать ваш модальный полный экран.Я уверен, что есть и другие способы достижения того же эффекта.

[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentModalViewController:myModalVC animated:YES];

В этом сценарии вам нужно реализовать свои собственные «модальные» методы для всех ваших контроллеров представления, используя addSubview: и yieldSubviewToFront:,Я сделал это в одном из моих более крупных проектов, где я хотел, чтобы поведение отличалось от модальных представлений.

2 голосов
/ 29 июня 2011

Это сработало для меня:

UIViewController* vc = [[[UIViewController alloc] init] autorelease];
UIWindow* keyWindow = [[UIApplication sharedApplication] keyWindow];
UIView* topView = [[keyWindow subviews] objectAtIndex:[[keyWindow subviews] count] - 1];
vc.view = topView;

[vc presentModelViewController...

По сути, вы создаете новый UIViewController и присоединяете его к самому верхнему представлению в главном окне (то, которое в данный момент видит пользователь).

1 голос
/ 17 ноября 2015

Просто, но не уверен насчет принятия и эффективности.Это то, что я использую.

  1. Встроить все контроллеры представления в mainView ниже rootView.
  2. Добавить любые модальные представления в rootView, отключив флаг userInteractionEnabled для mainView.Модальное представление должно быть добавлено к rootView, а не к mainView
  3. После этого снова включите взаимодействие с пользователем для mainView.

Надеюсь, это поможет ...

...