画面上に簡単なメッセージ/選択肢を表示(Alert/MessageBox)

過去のブログのアーカイブ
この記事は前身のブログのアーカイブを引き継いだものです. 画像が正しく表示できないなど,コンテンツの表示に問題がある恐れがあります.

画面上にかんたんにメッセージを表示するコード。大抵の言語は1行で表示することができますが、Swiftだとそういうわけには行かないようです。ただ汎用性のあるコードが書けるので融通は利くかも。

選択肢のあるメッセージ

Simulator Screen Shot 2017.03.08 16.17.23
// UIAlertControllerを生成
let alui = UIAlertController(title: "Message Title", message: "Message Contents.", preferredStyle: UIAlertControllerStyle.alert)
// 選択肢としてContinueボタンを用意する
let btn = UIAlertAction(title: "Continue", style: UIAlertActionStyle.default, handler: nil)
alui.addAction(btn)
// 画面に表示する
present(alui, animated: true, completion: nil)

1つのボタンがあるボタンを用意するだけで最低4行は必要になります。(無理やり縮めることも可能ではあるが…)
なお「Continueボタンを用意する」部分の2行を省くとボタンがないメッセージが表示されて一瞬で消えます。少なくともメッセージを表示したいときは1つのボタンは最低必要になります。
また、この場合だとボタンを押しても何も起きませんが、ボタンが押された(タッチされた)際のイベントはhandler引数に指定します。

指定した時間だけ表示して勝手に消えるメッセージ

Simulator Screen Shot 2017.03.08 16.10.51
ユーザーアクセシビリティ的にはよろしくない方法だけど、選択肢なしのメッセージでちゃんとユーザーが読めるようにする手段もあります。

let alui = UIAlertController(title: "Error!", message: "The key is not found.", preferredStyle: UIAlertControllerStyle.alert)
present(alui, animated: true, completion: {Void in
    // 5秒待機
    Thread.sleep(forTimeInterval: 5.0)
})

presentメソッドのcompletion引数に数秒待つスリープを呼び出せばこれでもOK、実際こんな実装している人は見たことない。
私が思うに、presentメソッドのcompletion引数はnilを指定する人が多いんじゃないかなって思う。使い道あるのかなこれ