快速按下按钮而不是短时间按住,不会突出显示该按钮。
与普通UIButton
上的UIView
不同。
就像官方推特上的头像一样,客户也有同样的问题 Instagram客户端似乎解决了这个问题,所有按钮都能正常工作。
在此处查找相同的问题:
Why doesn't UIButton showsTouchWhenHighlighted work when the button is on a UITableViewCell?
但我仍然不知道如何解决它。
答案 0 :(得分:8)
嗯...... UITableView
是UIScrollView
的子类,而UIScrollView
类因为自己的目的而吃掉了。
当它意识到触摸不适合它时,它将它传递给它的直接子视图
此功能是delaysContentTouches
属性(,默认情况下为YES
)。
这就是为什么UIButton
仅在延长触摸后才显示其突出显示的状态,因为触摸事件与UITableView
有一段时间,直到确定触摸是否用于滚动或滑动细胞和实现触摸的都不是,它立即将触摸事件传递给它正下方的subView
。
如果是快速点按,则会因为此延迟而绕过按钮的突出显示状态,并直接调用目标选择器方法。
要在UITableView
(就像在UIView
上一样)显示按钮的突出显示状态,请执行以下操作:
在-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;
}
}
在iOS6中,cell.subviews
有一个UITableViewCellContentView
类,它不是scrollView
子类,因此只需为tableView
设置一个参数即可。
所以,在-viewDidLoad
或任何适当的地方,这就是你需要的全部内容:
[yourTableViewObject setDelaysContentTouches:NO];
PS:通过这样做,它会弄乱tableView
的滚动,所以请使用更好的判断。