iOSのユーザーがButton(ボタン)を繰り返しクリックする問題の防止

1706 ワード

プロジェクトでは、ネットワークが遅いため、ユーザーはうんざりしてボタンをクリックし続け、結果として関連コードが何度も繰り返し実行され、ボタンのイベントがネットワーク要求であれば、ネットワーク要求の循環を招くという問題に直面することが多い.したがって,我々が解決する方法は,ボタンクリックイベントを実行する際にButtonに重複クリックを防止する方法を加えることである.
具体的には以下の方法があります.
1、performSelectorの方法を使用する
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;

クリックイベントに遅延実行イベントを追加し、遅延している間、このボタンのenabledNOに設定され、クリックできません.遅延時間が過ぎたら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.cancelPreviousPerformRequestsWithTargetperformSelectorを組み合わせた方法(推奨使用)
+ (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つの方法はボタンが繰り返しクリックされる問題を解決することができます.