Skip to content →

[Swift] UIButtonの重複タップを防ぐ

例えば、ボタンを押すと登録が行われる処理があったとします。そんな時、ボタンを二度クリックされたくありませんね。

ボタンのダブルクリックを防止

ボタンがタップされた時に以下の処理を行います。ボタンが一度タップされたら、login_btn.enabledでボタンを無効にして、その0.02秒後に有効にしています。こうすることで、パパっとタップされても動きません。

login_btn.enabled = false //login_btnはUIButtonです

let delay = 0.02 * Double(NSEC_PER_SEC)
let time  = dispatch_time(DISPATCH_TIME_NOW, Int64(delay))
dispatch_after(time, dispatch_get_main_queue(), {
    self.login_btn.enabled = true
})

3/5 16:25 追記

もっと確実な方法として、NSURLConnectionを使っている場合は、エラー時のdidFailWithErrorや、完了後のconnectionDidFinishLoadingメソッド内にて、ボタンを有効にするというやり方があります。こちらは、ご意見いただきました。ありがとうございます!

[sc name=”ios”][sc name=”engeneer”]

Published in 開発奮闘記

4 Comments

  1. DISQUS DISQUS

    秒数ではなく、クリック後の処理が完了したタイミングで押せるようにするのが良さそうな気がします。
    0.2秒というのはシステムやネットワーク通信を伴えば変化していくかと。
    同じ処理を何度もさせたくないのが目的なので、処理結果を受け取ってからボタンを有効にするのがいいのじゃないかなと思いました。

    • iritecjp iritecjp

      そうですね、完了後のタイミングや、エラーのタイミングでボタンを有効に戻すという方法が確実かもしれません。ご意見ありがとうございます。

      • DISQUS DISQUS

        隅をつつくようなコメントですみません(汗

        更新されるのをいつも楽しみに見てます。

        • iritecjp iritecjp

          いえいえ、こうやって公開することで、コードレビューしていただき、気付きや発見がありますので、ありがたいです。追記させていただきました!