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

#iphone #objective-c #xcode #ios #ipad

#iPhone #objective-c #xcode #iOS #iPad

Вопрос:

Этот вопрос задавался дюжину раз на этом сайте, но я не нашел ответа, который подходит для меня. У меня есть приложение для iPad с UISplitViewController на корневом уровне, которое создается программно. Внутри представления, которое отображается на правой панели, запускаемой взаимодействием пользователя, программно создается UINavigationController и представляется пользователю. Вот этот код:

 listenerController = [[UINavigationController alloc] initWithRootViewController:listenerView];
[listenerController.navigationBar setTintColor:[UIColor colorWithRed:185.0f/255.0f green:80.0f/255.0f blue:0.0f/255.0f alpha:1.0f]];

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {                    
    [listenerController setModalPresentationStyle:UIModalPresentationFormSheet];
    [listenerController setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
    [listenerController setModalInPopover:YES];
}

[self presentModalViewController:listenerController animated:YES];    
[listenerController release];
  

Это создает контроллер представления должным образом, но при его отображении iPad возвращается в портретный режим независимо от того, в какой ориентации у меня находится iPad. Затем, когда я закрываю модальное окно, оно поворачивается обратно.

У меня уже есть shouldAutorotateToInterfaceOrientation в viewcontroller правой панели, для которой установлено значение YES, и я даже пытался добавить это в класс делегирования основного приложения, но безуспешно. Не похоже, что мне нужно создавать подкласс UINavigationController только для переопределения метода shouldAutorotateToInterfaceOrientation.

Я вызываю presentModalViewController из неправильного объекта? Я пробовал [self presentModalViewController …], а также [self.parentViewController presentModalViewController …] с теми же результатами.

Ответ №1:

Я предполагаю, что self в вашем примере кода это контроллер просмотра справа (подробно). Вам нужно вызвать presentModalViewController из корня UISplitViewController .

Комментарии:

1. @andy У меня это сработало. Вам следует подумать о том, чтобы пометить это как правильное, если это сработало для вас.