Как отобразить фон NavigationController в UIPopoverController на iPhone - PullRequest
1 голос
/ 11 февраля 2012

Как я могу отобразить фон NavigationController (включая заголовок / кнопки) в моем контроллере UIPopover на iPhone?

На данный момент это выглядит так:

enter image description here

В моем PopoverView-ViewController:

- (void)viewDidLoad
{
[super viewDidLoad];

self.navigationController.navigationBar.hidden = NO;
self.navigationController.navigationBarHidden = NO;

self.navigationItem.title = @"self.navigationItem.title";
}

При вызове Popover:

InfoView *iv = [[InfoView alloc] initWithNibName:@"InfoView" bundle:nil];


    UINavigationController *uc = [[UINavigationController alloc] initWithRootViewController:iv];


    self.pop = [[UIPopoverController alloc] initWithContentViewController:uc];
    [self.pop setDelegate:self];
    [self.pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];

Это должно выглядеть так:

enter image description here

Ответы [ 5 ]

2 голосов
/ 20 февраля 2012

ваш код

InfoView *iv = [[InfoView alloc] initWithNibName:@"InfoView" bundle:nil];


UINavigationController *uc = [[UINavigationController alloc] initWithRootViewController:iv];


self.pop = [[UIPopoverController alloc] initWithContentViewController:uc];
[self.pop setDelegate:self];
[self.pop presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:true];

идеально подходит, просто спрячьте контроллер навигации по умолчанию и добавьте навигационную панель в XIB файла InfoView.xib и напишите там действие cancelButtonAction для выполнения отклонения представления или детализацииВыбор таблицы.Это работает нормально, пожалуйста, проверьте изображение, которое я сделал таким же образом, и поверьте мне, это работает нормально. enter image description here

2 голосов
/ 20 февраля 2012

Сначала UINavigationController не имеет собственного фона, он показывает фон контроллера представления контента. Если вы можете успешно показать popover с контроллером навигации, проверьте ваш InfoView. У этого вида есть какой-то фон?

Во-вторых, я пытался выполнить ваш код несколько раз в разных конфигурациях на iPhone, но всегда получал ошибку

Завершение приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: '- [UIPopoverController initWithContentViewController:] вызывается, когда не работает под UIUserInterfaceIdiomPad .

И это меня не удивило. Даже если вы сможете заставить его работать, Apple может отклонить ваше заявление. 2.1 Приложения, которые аварийно завершают работу, будут отклонены - Просто протестируйте свой код на нескольких устройствах и посмотрите результат.

1 голос
/ 19 февраля 2012

Добавьте это в свой код перед строкой [self.pop presentPopoverFromBarButtonItem:se..:

uc.modalPresentationStyle = UIModalPresentationCurrentContext;

См. Документацию для свойства modalPresentationStyle .

0 голосов
/ 20 февраля 2012

Вы пытались настроить фоновое представление как класс?

    [pop setPopoverBackgroundViewClass:bgView];
0 голосов
/ 11 февраля 2012

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

...