UIAlertController在ipad上运行崩溃

当使用UIAlertController的

UIAlertControllerStyleActionSheet

时在ipad上运行会崩溃,报以下的错误:

 reason: ‘Your application has presented a UIAlertController (<UIAlertController: 0x1099a7800>) 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.

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

alertSheetVc.popoverPresentationController.sourceView = self.bgScrollView; 

alertSheetVc.popoverPresentationController.sourceRect =  view.frame;

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

UIAlertController *alertSheetVc = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    alertSheetVc.popoverPresentationController.sourceView = self.bgScrollView;

    alertSheetVc.popoverPresentationController.sourceRect =  view.frame;

    UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

    }];
    UIAlertAction *albumAction = [UIAlertAction actionWithTitle:@"去相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self pushTZImagePickerController];
    }];
    UIAlertAction *cameraAction = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [self takePhoto];
    }];
    [alertSheetVc addAction:cameraAction];
    [alertSheetVc addAction:albumAction];
    [alertSheetVc addAction:cancelAction];
    [self presentViewController:alertSheetVc animated:YES completion:nil];

原文地址:https://www.cnblogs.com/Rong-Shengcom/p/9268493.html

时间: 2024-10-09 09:27:36

UIAlertController在ipad上运行崩溃的相关文章

类似ipad上的split,左边的tableview控制右边显示不同的视图

类似ipad上的split,左边的tableview控制右边显示不同的视图        最近要做一个项目,这个项目在ipad上运行,需要页面横向放置,首先,先记录一下怎么让程序运行后页面横向显示,我设置了一个基类的视图控制器,下边就称作base页面. 这个控制器里,填写一段这样的代码,所有的页面都继承自这个视图控制器,起到所有的页面都是横向展示 #pragma mark - #pragma mark -继承自这个类,以便于页面自动就会横屏 - (BOOL)shouldAutorotateToI

Q12:app在iPhone上运行正常,iPad上出现黑边问题解决方案

Q12:app在iPhone上运行正常,iPad上出现黑边问题解决方案 问题描述: app 在iPhone上运行正常,在iPad上出现黑边. 问题原因: 首先选中你的项目,右侧出现我们熟悉的General.Capabilities.Info等等.现在检查General->Deployment Info的Deployment Target 以及 Devices,一要保证ios系统版本配套,二要保证设备选中通用,有些朋友由于前个项目是设置了iPhone,第二次建项目时一时大意没有设置回来,那可就糟糕

HTML5定稿了,终于有一种编程语言开发的程序可以在Android和IOS两种设备上运行了

2007 年 W3C (万维网联盟)立项 HTML5,直至 2014 年 10 月底,这个长达八年的规范终于正式封稿. 过去这些年,HTML5 颠覆了 PC 互联网的格局,优化了移动互联网的体验,接下来,HTML5 将颠覆原生 App 世界.这听起来有点危言耸听,但若认真分析 HTML5 的发展史,你会发现,这个世界的发展趋势确实就是这样. 熟知历史才能预知未来,先让我们来看看 HTML5 为什么诞生.这 8 年是怎么过来的. 一. HTML5 的诞生 自 W3C 于 1999 年发布 HTML

MyEclipse运行崩溃问题 and 安装pyDev后无法显示的问题 解决办法

1.MyEclipse运行崩溃问题 我的MyEclipse会在我写python程序的时候不定时崩溃,特别是最近越发频繁,上网查询后发现: 由于我使用的jdk是32位的,而本本是64位的系统,从而导致了这种恶心的情况. 解决办法: 删除现有的jdk,去网上找一个64位的jdk,注意不要太低或太高,原因会在后面提及到. 2.安装pyDev后无法显示的问题 由于我被MyEclipse的随机崩溃恶心够了(虽然问题不是出在MyEclipse上),转而下了一个Eclipse-_-|||,并且下了个64位的J

UIAlertController类--sheet上拉菜单1(基本的)

一.效果 二.代码实现 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { [self sheetTest1]; } /** 注意:不能在上拉菜单中添加文本框 如果强行添加了文本框,会报运行时错误: reason: 'Text fields can only be added to an alert controller of style UIAlertControllerStyleAler

javascript的onbeforeunload函数在IOS上运行

今天在做项目的时候,组长让我用iPad测试一下前面写的离线缓存,后退不刷新页面,发现在iPad上onbeforeunload函数在iPad上一带而过,不运行??? 无奈之下,发现原来在IOS上,有自己的onshow和onhide方法  //搜索来自:http://www.cnblogs.com/vaal-water/archive/2012/09/25/2701769.html 原文如下: window.addEventListener("pageshow", myLoadHandle

iOS开发手记 - iOS9.3 Xcode7打包ipa文件在其他越狱机器上运行的方法和一些问题

现在Xcode7可以用一个appleid就可以往手机上部署测试app,不再需要$99,这也是方便.但是要把app发给别人的手机上运行还是不行,除非别人的手机在你身边可以直接通过Xcode安装 关于怎么打包可以看以下这篇文章 xcode7.x 免证书生产IPA打包文件 主要说说我碰到的问题 设备: iphone6 系统:ios9.3.3 目前最新 状态:已越狱 在文章里提到在Build Settings下面修改Code Signing Identify为Don’t Code Sign,我修改了之后

vs2013编译的程序在其他机器上运行的环境设置

vs2013编译的程序在其他没有安装vs2013的机器上运行会有问题,网上有很多解决方法,如果你还没有解决,可以尝试以下方法,这是我在反复崩溃,烦躁测试后得到的解决方法. 1. 安装vs2013 运行包 vcredist_x64.exe 如果这个时候还是不能正常执行,请不要和我一样崩溃, 试试我的解决方法,对这个运行包进行修复 控制面板--程序--程序和功能 在程序列表里找到 vc++ 12.0.30501 选中,修复 这样就可以打开vs2013编译出来的程序了,我碰到的情况是这样解决的. ==

让Qt在MIPS Linux上运行 good

下载 首先下载Qt everywhere,当前的版本是4.7.2,可以从nokia的网站上下载,也可以从git服务器上下载.考虑到文件有200M 以上的大小,下载速率低于25kBPS的,需要考虑从什么地方复制一份,否则需要等待较长时间才能下载下来.我是在家里下载这个文件的,所以开始编译已经是第二天了.考虑提升员工效率的话,需要预先预备好这些下载文件,或者增加接入带宽. 解压 第一步下载的文件是一个tar包,所以需要解压,通常解压需要在unix/Linux环境下进行,如果只是看代码,windows