4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UIButtonの重複タップを回避する

Posted at

##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
        }
    }

これで、ボタン連打で重複処理してしまうことを回避できます。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?