iOS之防止使用者重複點擊Button(按鈕)問題

來源:互聯網
上載者:User

標籤:div   requests   sts   code   ios   nil   class   設定   style   

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

}

 

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

 

 

 

 

iOS之防止使用者重複點擊Button(按鈕)問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.