gpt4 book ai didi

ios - 为什么 UITableViewCell 上的 UIButton 仅在触摸手势持续短时间时才会变暗

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:29 25 4
gpt4 key购买 nike

快速按下按钮而不是短时间按住,不会突出显示按钮。不同于普通 UIView 上的 UIButton

像官方推特客户端的头像也出现了同样的问题。
Instagram 客户端似乎解决了这个问题,所有按钮都可以正常工作。

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

但我仍然不知道如何修复它。

最佳答案

嗯... UITableViewUIScrollView 的子类,并且 UIScrollView 类以其自身目的吃触摸而闻名。< br/>当它意识到触摸不是针对它的时候,它会将它传递给它的直接 subview 。
功能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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com