iOS之防止用戶重復點擊Button(按鈕)問題


在項目中,我們往往會遇到這樣的問題:因為網絡較慢的原因,用戶會不耐煩的一直去點擊按鈕,這樣導致的結果時:相關代碼一遍一遍的被重復執行,如果按鈕的事件是網絡請求的話,這樣又導致一種網絡請求的循環。所以我們解決的方法是在執行按鈕點擊事件時,為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];

}

 

第二種是我們比較推薦的方法,但這兩種方法都可以解決按鈕被重復點擊的問題。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM