使用UIAlertControllerStyleActionSheet崩溃

报错如下:

reason: 'Your application has presented a UIAlertController () of style UIAlertControllerStyleActionSheet. The modalPresentationStyle of a UIAlertController with this style is UIModalPresentationPopover. You must provide location information for this popover through the alert controller's popoverPresentationController. You must provide either a sourceView and sourceRect or a barButtonItem. If this information is not known when you present the alert controller, you may provide it in the UIPopoverPresentationControllerDelegate method -prepareForPopoverPresentation.'

使用UIAlertControllerStyleActionSheet崩溃_第1张图片
如图

写因:

这方面的崩溃信息较少,所以我要警醒世人勿入此坑。

入此坑的必备条件:

iPad开发时,使用UIAlertController的UIAlertControllerStyleActionSheep这个显示方式。

入坑后的分析结果:

运行设备为iPhone时,正常。
运行设备为iPad时,崩溃。


使用UIAlertControllerStyleActionSheet崩溃_第2张图片
iPhone上显示

使用UIAlertControllerStyleActionSheet崩溃_第3张图片
iPad上显示

原来iPhone和iPad使用UIAlertController展示ActionSheep时,展示是不一样的。

所以在iPhone上正常显示的AlertController,在iPad上显示要添加几行代码。

代码如下:
// 解决iPad使用时的崩溃

UIPopoverPresentationController *popover = alertController.popoverPresentationController;

if (popover) {

    popover.sourceView = self.testBtn;
    popover.sourceRect = self.testBtn.bounds;
    popover.permittedArrowDirections = UIPopoverArrowDirectionAny;
}
使用UIAlertControllerStyleActionSheet崩溃_第4张图片
代码截图

你可能感兴趣的:(使用UIAlertControllerStyleActionSheet崩溃)