【Xcode】UIAlertControllerの外側をタップで閉じる & Toast風に一定時間後に閉じる方法
UIAlertControllerの外側をタップで閉じる
UIAlertControllerで、外側(上の図でグレーの部分)をタップすると閉じる方法です。
class ViewController: UIViewController { var alert: UIAlertController! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 外側をタップで非表示 alert = UIAlertController(title: "Alert", message: "Tap outside of alert and dismiss", preferredStyle: .alert) present(alert, animated: true, completion: { self.alert.view.superview?.isUserInteractionEnabled = true self.alert.view.superview?.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(self.closeAlert))) }) } func closeAlert() { alert.dismiss(animated: true, completion: nil) alert = nil } }
一定時間後に消えるToast風AlertController
AndroidのToastのように、タップしなくても一定時間後に消える方法です。
class ViewController: UIViewController { var alert: UIAlertController! override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 一定時間後に非表示 alert = UIAlertController(title: nil, message: "This alert will disappear after 3 sec", preferredStyle: .alert) present(alert, animated: true, completion: { self.perform(#selector(self.closeAlert), with: nil, afterDelay: 3.0) }) } func closeAlert() { alert.dismiss(animated: true, completion: nil) alert = nil }
Toast風の方はExtension化しておけば使い手がありそう。