*

UIAlertControllerの取り扱い

公開日: : 最終更新日:2015/01/26 Tips ,

旧聞ですが日本語版のStackOverflowが始動したようですね。
個人的な印象は「フィルタされてるけど内実は知恵袋系サイト見てるのと変わらないな・・・」という感じでした。時間が経過してこなれたらまた変わってくると思いますが、当面はStackoverflowでノウハウを拾う日が続きそうです。

さて、本題はiOS8で追加されたUIAlertControllerの使い方です。
概ねQuiitaのまとめ(下記「参考サイト」)で事足りるかな・・・と思ったんですが、UIBarButtonItemからの表示をする方法がないので難儀しました。
その部分をstackoverflowからの情報で補った、表示コードのサンプルを掲載しておきます。

// UIAlertControllerの初期化
// preferredStyleにはUIAlertControllerStyleAlertもある(アラートの表示)
UIAlertController* alert = [UIAlertController alertControllerWithTitle:nil
                                                               message:nil
                                                        preferredStyle:UIAlertControllerStyleActionSheet];
// UIAlertの「ボタン」にあたるアクションを追加。ブロック構造でボタン押下時の挙動を設定
// iOS7以前と動作を共用したい場合は「ボタンをおした時のメソッドを実行する」というブロックを用意するとよい
// キャンセルボタンはstyleをUIAlertActionStyleCancelとして、handlerをnilで追加
        [alert addAction:[UIAlertAction actionWithTitle:@"ボタンのタイトル"
                                                  style:UIAlertActionStyleDefault
                                                handler:^(UIAlertAction* action){
                                 // ここにボタンをおした時のアクションを入れる
                                                        }]];
        // UIBarButtonから表示させる場合
        alert.popoverPresentationController.barButtonItem = (UIBarButtonItem);
        // UIButtonなど、通常のViewから表示させる場合
//      alert.popoverPresentationController.sourceView = (UIView*);
//      alert.popoverPresentationController.sourceRect = (UIView*).bounds;

        // 表示
        [self presentViewController:alert animated:YES completion:nil];

この部分に限ってiOS7以前(UIAlertControllerを使えるかどうか)を判別したい場合は、

    Class class = NSClassFromString(@"UIAlertController");

を使って、classがnilかどうかをif文でチェックするといいでしょう(if (class) { … } else { … }という構文になると思います)。

参考サイト

[Qiita]
UIAlertControllerをiPadで使用する際の注意点

[stackoverflow]
presenting UIAlertController from a toolbar button

関連記事

Xcode8で余計なログを抑制する

Xcode8に更新してから、妙にログが増えたので、NSLogで明示したのと実行時エラー以外のログを吐

記事を読む

preferredContentSizeをUINavigationContorllerのPop時に再設定する

popoverで表示しているViewControllerのサイズを、他のViewController

記事を読む

iPad用storyboard⇔iPhone用Storyboardへの変換

iPad用アプリとしてiPad用前提のstoryboardから、iPhone対応にするにあたり、si

記事を読む

StoryboardからPopoverを作っても位置合わせコードは必要

これだけだとわかりづらいんですが。 XcodeのStoryboardから、Segueを"Prese

記事を読む

iOS9でURLスキームを登録する

私事ですが、iOS8から対応はしたいということで検証用に使っている自分のiPhoneもiOS8でがん

記事を読む

ヒラギノ角ゴを使う

小ネタですが存外調べるのが面倒だった項目なので覚書しておきます。 ヒラギノ角ゴシック体を使うた

記事を読む

ENMLからHTMLへの変換

最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったと

記事を読む

UISegmentedControlに見栄え良く背景色を設定する

UISegmentedControlをiOS7で使おうとすると、基本の背景色が「透明」になりますが、

記事を読む

App Storeのページにアプリケーションから直接アクセスする方法

去年(2013年)の秋ごろ、iOS7の出始めの時期に書かれたblog記事などを参考にすると、iOS6

記事を読む

iOS8のシミュレーターでLocalizationのテストをする

iOS8.1のシミュレーターでは、従前できていたシミュレーター内での「設定」(Setting)からの

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑