快速按下按钮且短时间不按住不会突出显示按钮。
与普通UIButton
上的UIView
不同。
就像官方Twitter客户中的头像出现了同样的问题。
Instagram客户端似乎已解决此问题,所有按钮均正常运行。
在这里找到相同的问题:
Why doesn't UIButton showsTouchWhenHighlighted work when the button is on a UITableViewCell?
但是我仍然不知道如何解决它。
最佳答案
好吧... UITableView
是UIScrollView
的子类,而UIScrollView
类因其自身的目的而吃东西。
当它意识到触摸不是必需的时,它将其传递给它的直接子视图。
此功能是delaysContentTouches
属性(默认情况下为YES
)。
这就是为什么UIButton
仅在长时间触摸后才显示其突出显示状态的原因,因为触摸事件与UITableView
在一起的时间很短,直到它确定触摸是用于滚动或滑动单元格并且实现触摸都不是,它将触摸事件立即传递到其下方的subView
。
在快速点击的情况下,由于该延迟,按钮的突出显示状态被绕过,并且直接调用目标选择器方法。
要在UITableView
中显示按钮的突出显示状态(就像在UIView
上一样):
对于iOS7 +:
使用-viewDidLoad
或任何合适的位置:
[yourTableViewObject setDelaysContentTouches:NO];
另外...
cell.subviews
有一个UITableViewCellScrollView
类,它显然是另一个scrollView
,我们还需要禁用该类的delaysContentTouches
属性。所以...在
-cellForRowAtIndexPath:
方法中(在return cell;
之前)执行:NSArray *test = cell.subviews;
for (UIView *currentView in cell.subviews) {
if ([NSStringFromClass([currentView class]) isEqualToString:@"UITableViewCellScrollView"]) {
UIScrollView *svTemp = (UIScrollView *) currentView;
[svTemp setDelaysContentTouches:NO];
break;
}
}
对于iOS 6-:
在iOS6中,
cell.subviews
具有一个UITableViewCellContentView
类,它不是scrollView
子类,因此只需为tableView
设置一个参数即可。因此,在
-viewDidLoad
或任何适当的位置,这就是您所需要的:[yourTableViewObject setDelaysContentTouches:NO];
PS:这样做会干扰
tableView
的滚动,因此请使用更好的判断力。 关于ios - 为什么当持续短时间触摸手势时,UITableViewCell上的UIButton只会变暗,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21372817/