場景
在iOS開發(fā)中巡验,我們經(jīng)常會遇到這么個問題:用戶點擊了一個按鈕,此時app出現(xiàn)了卡頓哼审,用戶以為沒有點到谐腰,于是又點了一下,這時app不卡了涩盾,開始了push
操作十气,此時就會出現(xiàn)push
兩次的情況,這顯然是不對的春霍,那么我們在開發(fā)中應(yīng)該如何避免這種問題的發(fā)生呢砸西?下面我們就介紹一種方法。
解決方法
解決方法其實很簡單,就是在每次點擊UIButton
時芹枷,將之前的UIButton
事件取消掉即可衅疙,這就是實現(xiàn)思路,下面我們看具體的實現(xiàn)鸳慈。
- 第一步不用多說饱溢,自然是先創(chuàng)建一個
UIButton
并給他添加點擊事件。 -
第二步是最主要的走芋,實現(xiàn)
UIButton
的點擊事件绩郎,分為2步:- 取消之前
UIButton
的點擊事件,代碼如下:
- 取消之前
[[self class] cancelPreviousPerformRequestsWithTarget:self selector:@selector(goSecondVC) object:sender];
- 執(zhí)行
UIButton
點擊事件:
[self performSelector:@selector(goSecondVC) withObject:sender afterDelay:0.1];
注意:
- 這里為什么要使用
performSelector:withObject:afterDelay:
來執(zhí)行UIButton
的點擊事件翁逞,而不是直接調(diào)用goSecondVC
肋杖,這是因為cancelPreviousPerformRequestsWithTarget:selector:object:
只能取消performSelector:withObject:afterDelay:
執(zhí)行的操作。 -
afterDelay:0.1
這里的延遲時間個人感覺比較講究熄攘,網(wǎng)上有些同學(xué)設(shè)置的0.2
兽愤,我試了一下,感覺有點延遲的太長了挪圾,用戶體驗不好浅萧,但是如果不延遲,即設(shè)置為0.0
的話哲思,是沒有任何卵用的洼畅,所以我個人感覺設(shè)置成0.1
是最好的,既可以實現(xiàn)效果棚赔,又不會讓用戶感覺到延遲帝簇。
ok,問題解決了靠益。??????