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系统