1. 程式人生 > >UIButton的高亮狀態延遲問題

UIButton的高亮狀態延遲問題

UIScrollView上的UIButton點選的時候沒有高亮狀態,但是確實觸發了點選事件,不過這樣會造成一個假象,給使用者看來UIButton沒有被點選的感覺。 但是要是長時間點選的話,則會高亮。於是我發現,導致這種現象應該就是時間長短的問題。順著這個問題想下去,就追尋到UIScrollViewtouch原理,UIScrollView有一個delaysContentTouches的屬性

解決辦法

//delaysContentTouches 預設值為YES,即UIScrollView會在接受到手勢是延遲150ms來判斷該手勢是否能觸發UIScrollView的滑動事件;
//反之值為NO時,UIScrollView會立馬將接受到的手勢分發到子檢視上。即button在點選時會立即呈現高亮狀態
- (BOOL)delaysContentTouches { return NO; } /** delaysContentTouches設定為NO是遠遠不夠的,因為這樣的話你想要拖動UIScrollView而起點落在其它有手勢識別的檢視上是會拖不動的。 於是我們要過載touchesShouldCancelInContentView,此方法決定手勢是否取消傳遞到subView上,拖動UIScrollView時觸發。 */ - (BOOL)touchesShouldCancelInContentView:(UIView *)view { // 如果是button, 則點選button的時候不影響滑動
if ([view isKindOfClass:[UIButton class]]) { return YES; } return [super touchesShouldCancelInContentView:view]; }