iOS viewDidAppear()でアラート画面を同期的に表示したい。
viewDidAppear()内でUIAlertControllを使用したアラート画面を表示し、ボタンが押されるまで待つようしたいです。(iOS11)
下記の処理を実装しましたが、アラート画面が表示されず画面のタップもできない状態になります。
非同期や遅延実行によるアラート画面呼び出しは問題なくアラート画面が表示されます。
同期をとる何かいい手段はないでしょうか?
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
var doneloop = false
let alert = UIAlertController(title:"タイトル", message: "メッセージ", preferredStyle: UIAlertControllerStyle.alert)
let action1 = UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: {
(action: UIAlertAction!) in
print("push OK button")
doneloop = true // Runloopを抜ける
})
alert.addAction(action1)
self.present(alert, animated: false, completion: nil)
// ボタンがクリックされるまで待機
while !doneloop {
RunLoop.current.run(until: Date(timeIntervalSinceNow: 0.1))
}
alert.dismiss(animated: false, completion: nil)
}