標籤: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(按鈕)問題