iPad在使用AlertController导致崩溃

先看看下面代码:

UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:nil message:@"您确定要退出吗?" preferredStyle:UIAlertControllerStyleActionSheet];

UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {

// do somethings...

}];

UIColor *color = [UIColor redColor];

[action2 setValue:color forKey:@"_titleTextColor"];

[alertVC addAction:action2];

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

//do something...

}];

[alertVC addAction:action3];

[self presentViewController:alertVC animated:YES completion:nil];

上面这段代码在iPhone上运行时没有问题的,但是在iPad上运行会崩溃,至于原因我也看不明白,只知道如果preferredStyle是设置的UIAlertControllerStyleActionSheet就会崩溃,但是如果preferredStyle设置成UIAlertControllerStyleAlert则不会奔溃;通过搜索发现 需要在模态之前加几句代码,

if ([alertVC respondsToSelector:@selector(popoverPresentationController)]) {

alertVC.popoverPresentationController.sourceView = self.view; //必须加

alertVC.popoverPresentationController.sourceRect = CGRectMake(0, kScreenHeight, kScreenWidth, kScreenHeight);//可选,我这里加这句代码是为了调整到合适的位置

}

[self presentViewController:alertVC animated:YES completion:nil];

另外需要注意的是,在iPhone上 如果有多个UIAlertAction ,UIAlertAction的style可以是不同的,但是在iPad上如果两个或者多个UIAlertAction的style不同,那么只会显示一个。上面的情况可能是我的iPad系统比较老吧,9.3.5系统

你可能感兴趣的:(iPad在使用AlertController导致崩溃)