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];
}

你可能感兴趣的:(iOS-界面显示异常)