UIButton高亮状态卡顿

时间:2022-02-14 07:58:55

童鞋们有么有遇到过一个tableview或者是scrollview上放置一个button然后点击button,但是button的高亮状态切换不过来呢?

解决方案:

新建一个类继承自UITableView或者UIScrollView,然后

(1)tableview

- (id)initWithFrame:(CGRect)frame style:(UITableViewStyle)style{

if (self = [super initWithFrame:frame style:style])

{

self.delaysContentTouches = NO;

for (id view in self.subviews)

{

if ([NSStringFromClass([view class]) isEqualToString:@"UITableViewWrapperView"])

{

if ([view isKindOfClass:[UIScrollView class]])

{

UIScrollView * scroll = (UIScrollView *)view;

scroll.delaysContentTouches = NO;

}

break;

}

}

}

return self;

}

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

if ([view isKindOfClass:[UIButton class]])

{

return YES;

}

return [super touchesShouldCancelInContentView:view];

}

(2)scrollView

- (id)initWithFrame:(CGRect)frame{

if (self = [super initWithFrame:frame])

{

self.delaysContentTouches = NO;

}

return self;

}

- (BOOL)touchesShouldCancelInContentView:(UIView *)view

{

if ([view isKindOfClass:[UIButton class]])

{

return YES;

}

return [super touchesShouldCancelInContentView:view];

}

如果用到tableview或者scrollView的话让他继承自这个新建的类即可。

(2)扩充:

UIScrollView:
1、属性delaysContentTouches,布尔类型,默认值为YES。值为YES时,UIScrollView会在接收到手势时延迟150ms来判断该手势是否能够出发UIScrollView的滑动事件;值为NO时,UIScrollView会立马将接收到的手势分发到子视图上。
(注:仅仅设置这个是不够的,你会发现如果想要拖动scrollView而起点落在其他有手势识别的视图上时会拖不动)
2、方法- (BOOL)touchesShouldCancelInContentView:(UIView *)view,此方法的重载是帮助我们完美解决问题的重点,决定手势是否取消传递到view上,拖动ScrollView时触发。返回NO时,拖动手势将留在ScrollView上,返回YES则将手势传到view上。(若view是UIControl,则默认返回YES)

UITableView:

不得不说,UITableView(包括UITableViewCell在内)在iOS7和iOS8中的视图结构是不同的,且存在着很多我们在编码时永远接触不到的视图,但我们可通过Debug将其subviews逐个逐个找出来。这关系到我们这个问题坑比较深的层次。
iOS7:UITableView中存在n+1个UIScrollView,一个是UITableView本身,另外n个存在于UITableViewCell与cell的contentView之间,类名为UITableViewCellScrollView,活的不久,仅存在于iOS7中,在iOS8中已被移除。
iOS8:UITableView中存在2个UIScrollView,一个是UITableView本身,另外一个存在于UITableView与UITableViewCell之间,类名为UITableViewWrapperView。需要注意的是,UITableViewWrapperView在iOS7中并不是一个UIScrollView。

-------------------感谢app dealloc的分享