2015-09-26 2 views
1

Все говорят UIPopoverController работы по прошивке 8.UIPopoverController в прошивке 8

Но если я проверить мое приложение в iPhone тренажере получать разбился и войти говорит:

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

Этот код отлично работает на iPad-симуляторе.

Моего Development Target набор на 8,4

UIViewController* viewController = [[UIViewController alloc] initWithNibName:@"StyleMenu" bundle:nil]; 
    self.stylePopover = [[UIPopoverController alloc] initWithContentViewController:viewController]; 
    self.stylePopover.popoverContentSize = CGSizeMake(250,200); 
    [self.stylePopover presentPopoverFromBarButtonItem:styleBarButton 
           permittedArrowDirections:UIPopoverArrowDirectionUp 
               animated:YES]; 

будет оценена любая помощь.

+0

UIPopoverController работает в IPad только ... –

ответ

2

Да, это возможно, начиная с iOS8. Я уже дал ответ на аналогичный вопрос и даже внедрил полезный класс для работы с popovers на iPhone и даже добавил туда некоторые пользовательские элементы, такие как UITableView, WKWebView, вы его назовете.
Вы можете проверить свой ответ и ссылку на класс здесь: https://stackoverflow.com/a/30418212/2924920

+0

ваш код кажется действительно приятным, НО как я могу использовать его с 'UIBarButtonItem' ?, где у меня нет никаких' sourceView' и 'sourceRect'. – mehdok

+0

Легко.Просто используйте этот код: '- (IBAction) didTapBarButtonItem: (UIBarButtonItem *) отправитель { // Настройте, как в моем примере, сначала: popoverController.sourceView = nil; popoverController.sourceRect = CGRectMake (sender.width, CGRectGetHeight (self.navigationController.navigationBar.bounds), 0, 0); // Дальнейшие конфигурации, как в моем примере после ... } ' – Soberman

+0

ОК, что сработало, но есть ли у вас проблемы с вращением устройства? Когда я повернусь к пейзажу, 'popOver' отобразится неправильно. любая помощь с этим? – mehdok

2

UIPopoverController недоступен на iPhone. Используйте новый popoverPresentationController свойство вашего ViewController вместо

https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIPopoverPresentationController_class/index.html

MYViewController * myViewController = [[MYViewController alloc] init]; 
myViewController.modalPresentationStyle = UIModalPresentationPopover; 
myViewController.popoverPresentationController.sourceView = button; 
myViewController.popoverPresentationController.sourceRect = button.bounds; 
[self presentViewController: myViewController animated: YES completion: nil]; 
+0

TNX, это работает отлично, но если я использую его с '' UIBarButtonItem' как viewController.popoverPresentationController.barButtonItem = styleBarButton; 'тогда как установить' sourceRect'? если я не установлю это, popover заполнит весь экран! – mehdok

+0

«SourceRect» - это точка стрелки. Чтобы установить размер, вам нужно установить свойство 'preferredContentSize' вашего контроллера представления –

+0

ok,' viewController.preferredContentSize = CGSizeMake (250,200); 'не будет работать и' viewController.popoverPresentationController.preferredContentSize'is свойство readonly. так как я могу установить размер? – mehdok

0

Unfortunately the UIPopoverController is exclusive for iPads, as per the Apple documentation

поповер контроллеры предназначены для использования исключительно на устройствах IPad. Попытка создать его на других устройствах приводит к исключению.

Также возможен дубликат этого вопроса? UIPopoverController for iphone not working?

+0

Мы можем использовать 'UIPopoverPresentationController' для iPhone с iOS 8, он доступен. –

 Смежные вопросы

  • Нет связанных вопросов^_^