iOS 8 中的 UIPopoverController

UIPopoverController in iOS 8

每个人都说 UIPopoverController 工作 iOS 8.

但是如果我在 iPhone 模拟器中测试我的应用程序,它会崩溃并且日志显示:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIPopoverController initWithContentViewController:] called when not running under 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];

如有任何帮助,我们将不胜感激。

UIPopoverController 在 iPhone 上不可用。使用 viewController 的新 popoverPresentationController 属性 代替

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];

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

Popover controllers are for use exclusively on iPad devices. Attempting to create one on other devices results in an exception.

这个问题也可能重复? UIPopoverController for iphone not working?

是的,可以从 iOS8 开始。我已经回答了类似的问题,甚至实现了一个有用的 class 来处理 iPhone 上的弹出窗口,甚至在那里放了一些自定义元素,例如 UITableViewWKWebView、随你便。
您可以在此处查看我的回答和 link 至 class: