Как сообщить родительскому viewcontroller об измененной ориентации экрана в модальном контроллере представления? - PullRequest
2 голосов
/ 14 октября 2011

Я представляю контроллер модального представления над UISplitViewController, находясь в портретном режиме. Теперь я поворачиваю iPad в ландшафтный режим и отключаю модальный контроллер вида.

Похоже, что UISplitViewController не получил уведомление об изменении ориентации: 1-й вид контроллера разделенного вида скрыт, а 2-й вид занимает не весь размер экрана.

Если я снова поворачиваюсь вперед и назад, контроллер разделенного вида снова отображается нормально.

Более того, проблема возникает только с iOS Simulator 5.0 (или устройством под управлением iOS5), но не с 4.3.

Есть идеи?

Ответы [ 2 ]

2 голосов
/ 16 мая 2012

У меня такая же проблема.

В моем проекте splitViewController добавлен как подпредставление в окне.И он получает сообщения вращения нормально.Но когда я пытаюсь добавить свой «модальный» viewController в качестве подпредставления в окне, он не получает сообщения о ротации.Похоже, сообщения вращения получают только подпредставление с индексом 0. Поэтому я решил это следующим образом:

Отображение «модального» viewController

[appDelegate.window insertSubview:myModalViewController.view atIndex:0];
[appDelegate.splitViewController.view removeFromSuperview];

Скрытие «модального» viewController

[appDelegate.window insertSubview:appDelegate.splitViewController.view atIndex:0];
[myModalViewController.view removeFromSuperview];

Но в этом решении есть один недостаток: modalViewController не будет загружать свое представление сразу после вызова метода "[appDelegate.window insertSubview:myModalViewController.view atIndex:0]".Чтобы исправить этот дефект, я просто на мгновение представляю его как модальное:

Отображение «модального» viewController:

// present and dismiss methods are called to cause viewDidLoad in modalViewController
[appDelegate.splitViewController presentModalViewController:myModalViewController animated:NO];
[appDelegate.splitViewController dismissModalViewControllerAnimated:NO];

[appDelegate.window insertSubview:myModalViewController.view atIndex:0];
[appDelegate.splitViewController.view removeFromSuperview];
0 голосов
/ 21 октября 2011

У меня такая же проблема здесь: Не работает Ориентация уведомлений в VIewController под модальным, с iOS5 .

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

yourProjectAppDelegate *delegate = (yourProjectAppDelegate*) [[UIApplication sharedApplication]delegate];
yourProjectViewController *i=((yourProjectViewController *)delegate.window.yourConfigurationOfController);
[i didRotateFromInterfaceOrientation:interfaceOrientationReceived];

В i id у вас есть тот же объект, который вы используете как: yourConfigurationOfController, в данном случае UISPlit, я думаю.Если я не ваш uiSplit, вы можете получить каскадом переменных.interfaceOrientationReceived - это ориентация, полученная в модальном режиме:

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

Надежда может помочь!Удачи!

(Извините за мой английский:))

...