iOSのユーザーがButton(ボタン)を繰り返しクリックする問題の防止
1706 ワード
プロジェクトでは、ネットワークが遅いため、ユーザーはうんざりしてボタンをクリックし続け、結果として関連コードが何度も繰り返し実行され、ボタンのイベントがネットワーク要求であれば、ネットワーク要求の循環を招くという問題に直面することが多い.したがって,我々が解決する方法は,ボタンクリックイベントを実行する際に
具体的には以下の方法があります.
1、
クリックイベントに遅延実行イベントを追加し、遅延している間、このボタンの
コードは次のとおりです.
以上の方法では、ボタンを繰り返しクリックする問題をうまく解決できますが、より推奨されるのは次の方法です.
2.
原理は、ボタンをクリックするたびに、キャンセル前のボタンクリック実行イベントを実行してから、遅延実行方法(ボタン実行イベント)を実行することです.コードは次のとおりです.
2つ目は私たちが比較的推奨する方法ですが、この2つの方法はボタンが繰り返しクリックされる問題を解決することができます.
Button
に重複クリックを防止する方法を加えることである.具体的には以下の方法があります.
1、
performSelector
の方法を使用する- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
クリックイベントに遅延実行イベントを追加し、遅延している間、このボタンの
enabled
はNO
に設定され、クリックできません.遅延時間が過ぎたらYES
に設定します.このようにして、ユーザがボタンを繰り返しクリックすることを防止する.コードは次のとおりです.
-(void)buttonClicked:(id)sender
{
sender.enabled = NO;
//
[self performSelector:@selector(changeButtonStatus:) withObject:nil afterDelay:1.0f];
}
-(void)changeButtonStatus:(id)sender
{
sender.enabled = YES;
}
以上の方法では、ボタンを繰り返しクリックする問題をうまく解決できますが、より推奨されるのは次の方法です.
2.
cancelPreviousPerformRequestsWithTarget
とperformSelector
を組み合わせた方法(推奨使用)+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget selector:(SEL)aSelector object:(nullable id)anArgument;
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
原理は、ボタンをクリックするたびに、キャンセル前のボタンクリック実行イベントを実行してから、遅延実行方法(ボタン実行イベント)を実行することです.コードは次のとおりです.
- (void)buttonClicked:(id)sender
{
// 。
}
- (void)starButtonClicked:(id)sender
{
// 。
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(buttonClicked:)object:sender];
[self performSelector:@selector(buttonClicked:)withObject:sender afterDelay:0.2f];
}
2つ目は私たちが比較的推奨する方法ですが、この2つの方法はボタンが繰り返しクリックされる問題を解決することができます.