解决ios7按钮高亮反应延时问题

1、问题现象

  • TableView上的按钮点击时出现高亮延时
  • ScrollView上的按钮点击出现高亮延时
  • TableViewCell上的按钮点击出现高亮延时

2、问题分析

2.1、这是一个响应顺序的问题,可能oc在多层事件处理时的一种机制,TableView继承自ScrollView,所以根本原因在于ScrollView上,但还是可以解决的
2.2、scrollView有个属性叫delaysContentTouches,将该属性设置成NO即可 scrollView.delaysContentTouches = NO;根本原因不做深究,这里以解决问题为出发点
2.3、另外一点,TableView如果设置了delaysContentTouches = NO好像也不行,但在iOS6中却没有这个问题,什么原因呢?
2.3.1、iOS6中TableViewCell上面是contentView,再上面才是子view,所以设置了TableView的delaysContentTouches就可以解决了,但iOS7不行
2.3.2、iOS7中TableViewCell比iOS6要复杂,iOS7中的TableViewCell上面是一个scrollView,再上面才是contentView,所以这里又夹了一层scrollView;
2.4、所以iOS7中:

1
2
3
1、设置tableView.delaysContentTouches = NO;
2.1、UIScrollView *sv = [cell.subviews firstobject]; // 取到Cell上的scrollView
2.2、sv.delaysContentTouches = NO; // 取消响应延时

问题搞定!
可以在给TableViewCell赋值时加上这一句,也可以在重写Cell或定义Cell时设置该属性

Leave a Reply