快速按下按钮且短时间不按住不会突出显示按钮。
与普通UIButton上的UIView不同。

就像官方Twitter客户中的头像出现了同样的问题。
Instagram客户端似乎已解决此问题,所有按钮均正常运行。

在这里找到相同的问题:
Why doesn't UIButton showsTouchWhenHighlighted work when the button is on a UITableViewCell?

但是我仍然不知道如何解决它。

最佳答案

好吧... UITableViewUIScrollView的子类,而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/

10-14 22:25