ポイント
- スタイルは2種類
UIAlertControllerStyleActionSheet
とUIAlertControllerStyleAlert
- デフォルトは
UIAlertControllerStyleActionSheet
- スタイルは
alertControllerWithTitle:message:preferredStyle
以外では指定できない
対策
- UIAlertControllerの
popoverPresentationController
プロパティを使用する
iPadでUIAlertControllerStyleActionSheet
をpopoverPresentationController
の指定なしに使うとクラッシュします
例
(@kishikawakatsumi さんご指摘ありがとうございます)
UIAlertController *alertController
= [UIAlertController alertControllerWithTitle:@"タイトル"
message:@"メッセージ"
preferredStyle:UIAlertControllerStyleActionSheet];
[alertController addAction:[UIAlertAction actionWithTitle:@"アクション1" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// アクション1 の処理
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"アクション2" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
// アクション2 の処理
}]];
[alertController addAction:[UIAlertAction actionWithTitle:@"閉じる" style:UIAlertActionStyleCancel handler:^(UIAlertAction *action) {}]];
// iPad用の設定
alertController.popoverPresentationController.sourceView = self.view;
alertController.popoverPresentationController.sourceRect = CGRectMake(100.0, 100.0, 20.0, 20.0);
//RectではなくUIBarButtonItemを起点にできるプロパティもある
//alertController.popoverPresentationController.barButtonItem
// 表示
[self presentViewController:alertController animated:YES completion:^{}];
右iPad: 指定したRectを起点として"閉じる"(UIAlertActionStyleCancelで指定した部分)を除いて表示されます。外側をタップすることでアクションを実行せずに閉じることができます。