下面一段代码
{
UIAlertController * alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction * actionTakePhoto = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"拍照");
}];
[alert addAction:actionTakePhoto];
UIAlertAction * actionPicture = [UIAlertAction actionWithTitle:@"从相册选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"相册");
}];
[alert addAction:actionPicture];
UIAlertAction * actionCancle = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"取消");
}];
[alert addAction:actionCancle];
[self presentViewController:alert animated:YES completion:nil];
}
在手机上运行,模拟器运行都是没问题的,但是在iPad上运行,就会崩溃,原因么。。。因为UIAlertController在iPad上在
UIAlertControllerStyleActionSheet
模式下会崩溃!
这就很烦,不崩溃怎么办呢?
1、改成UIAlertControllerStyleAlert模式
UIAlertControllerStyleAlert
2、增加UIPopoverPresentationController 即在present之前 增加pop
if ([UIDevice isPadDevice]) {
UIPopoverPresentationController *pop = [alert popoverPresentationController];
pop.sourceView = self.view;//悬挂的视图
pop.permittedArrowDirections = UIPopoverArrowDirectionUp;//箭头方向
pop.sourceRect = self.view.bounds;//悬挂的地方
}
//present之前加入上边的代码
[self presentViewController:alert animated:YES completion:nil];
这样就不会崩溃了,,,
转自:https://my.oschina.net/rainwz/blog/2870426