##UIButtonを連打
UIButtonを連打すると処理を複数回行ってしまう事象が発生してしまいました。
ユーザーに重複タップさせたくない。。。
結論から言うと一回押したら押せなくしてしまえばよいです。
ボタンをタップした
↓
処理を行う
の流れを
ボタンをタップした
↓
ボタンをタップできなくする
↓
処理を行う
にすればよいです
isEnabledでボタンを非活性化してあげます
なので
@IBOutlet weak var Button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapButton(_ sender: Any) {
Button.isEnabled = false
//処理を記述
}
}
上のようにすればボタンタップ後、すぐにボタンが非活性化しているので
連打して重複処理が起こらずに済みます。
しかし、タップ後他画面へ遷移していれば良いですが
同じ画面表示だといつまで経ってもボタンがタップできないままになってしまいます。
一定時間経過後にボタンを活性化させてあげます。
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
Button.isEnabled = true
}
これは「1秒後にボタンを活性化する」という処理になります。
最終的に
@IBOutlet weak var Button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func tapButton(_ sender: Any) {
Button.isEnabled = false
//処理を記述
DispatchQueue.main.asyncAfter(deadline: .now() + 1){
Button.isEnabled = true
}
}
これで、ボタン連打で重複処理してしまうことを回避できます。