Принятый ответ на самом деле не отвечает на вопрос, "есть ли способ, чтобы НЕ закрывать поповер при нажатии за его пределами?"Это дает возможное представление, но может потребовать хакерского доступа ко всем родительским представлениям и определения того, какие представления отображаются на экране и т. Д. Вопрос можно перефразировать следующим образом: «Как сделать модальное представление для поповера?»
Высделал бы это так, с помощью кнопки «Готово», чтобы закрыть поповер:
UIViewController* vc = [[[UIViewController alloc] init] autorelease];
UIBarButtonItem* doneButton = [[[UIBarButtonItem alloc] initWithTitle:@"Done"] style:UIBarButtonItemStyleDone target:self action:@selector(processDoneAction)] autorelease];
[vc.navigationItem setLeftBarButtonItem:doneButton];
vc.modalInPopover = YES;
//If you want full screen:
vc.modalPresentationStyle = UIModalPresentationFullScreen;
vc.wantsFullScreenLayout = YES;
UINavigationController* navC = [[[UINavigationController alloc] initWithRootViewController:vc] autorelease];
UIView* view = create your view
vc.view = view;
UIPopoverController* pc = [[[UIPopoverController alloc] initWithContentViewController:navC] autorelease];
pc.delegate = self;
self.popoverController = pc;
Тогда в вашем методе processDoneAction вам нужно будет закрыть поповер.Другими соображениями было бы отклонение и повторное отображение изменений ориентации устройства, но я оставлю это другому упражнению, так как на него ранее был дан ответ на stackoverflow.