快速按下按钮并且短时间不按住,将不会突出显示该按钮。 不同于普通UIView
上的UIButton
。
就像官方推特客户端中的头像一样,遇到了同样的问题。
Instagram客户端似乎解决了这个问题,所有按钮都可以正常工作。
在这里找到同样的问题:
为什么当按钮位于UITableViewCell上时,UIButton 显示触摸何时突出显示不起作用?
但我仍然不知道如何解决它。
嗯...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
有一个不是scrollView
子类的UITableViewCellContentView
类,因此只需为tableView
设置一个参数即可。
因此,在-viewDidLoad
或任何合适的地方,这就是您所需要的:
[yourTableViewObject setDelaysContentTouches:NO];
PS:这样做会弄乱tableView
的滚动,所以使用你更好的判断。