iOS-iPad上使用UIAlertController的UIAlertControllerStyleActionSheet崩溃

在iPad上使用UIAlertController的UIAlertControllerStyleActionSheet样式弹出相机还是相册选择框时,程序崩溃,信息如下

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Your application has presented a UIAlertController (<UIAlertController: 0x7fe167894000>) of style UIAlertControllerStyleActionSheet from MainTabBarViewController (<MainTabBarViewController: 0x7fe16709e000>). 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.'

意思就是没有设置UIAlertController这个弹出窗口的位置信息,可以通过下面的方式解决

/// iPad上需要设置UIAlertController这个弹出窗口的位置信息(当使用UIAlertController的UIAlertControllerStyleActionSheet时在iPad上运行会崩溃)
            if (isPad) {
                alertVC.popoverPresentationController.sourceView = self.vMe.table;
                alertVC.popoverPresentationController.sourceRect = self.view.frame;
            }

或者是通过实现 UIPopoverPresentationControllerDelegate的prepareForPopoverPresentation方法 来设置UIAlertController在当前页面上的位置信息,设置后的显示效果与 iPhone是有区别的不是在屏幕的中间位置弹出而是在你所设置的位置弹出:如下图的界面效果

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:nil
                                                                             message:nil
                                                                      preferredStyle:UIAlertControllerStyleActionSheet];
            /// iPad上需要设置UIAlertController这个弹出窗口的位置信息(当使用UIAlertController的UIAlertControllerStyleActionSheet时在iPad上运行会崩溃)
            if (isPad) {
                alertVC.popoverPresentationController.sourceView = self.vMe.table;
                alertVC.popoverPresentationController.sourceRect = self.view.frame;
            }
            
            /// 取消
            UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:BZLocalizedString(@"common_cancel", nil)
                                                                   style:UIAlertActionStyleCancel
                                                                 handler:^(UIAlertAction * _Nonnull action) {
                                                                 }];
            /// 相册
            UIAlertAction *photoAlbumAction = [UIAlertAction actionWithTitle:BZLocalizedString(@"common_photoAlbum", nil)
                                                                       style:UIAlertActionStyleDefault
                                                                     handler:^(UIAlertAction * _Nonnull action) {
                                                                         [weakSelf showPickerFromPhotoAlbum];
                                                                     }];
            /// 拍照
            UIAlertAction *takingPicturesAction = [UIAlertAction actionWithTitle:BZLocalizedString(@"common_takingPictures", nil)
                                                                           style:UIAlertActionStyleDefault
                                                                         handler:^(UIAlertAction * _Nonnull action) {
                                                                             [weakSelf showPickerFromCameraSource];
                                                                         }];
            [alertVC addAction:cancelAction];
            [alertVC addAction:takingPicturesAction];
            [alertVC addAction:photoAlbumAction];
            /// 展示
            [weakSelf presentViewController:alertVC animated:YES completion:nil];

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值