为啥 UIButton.showsTouchWhenHighlighted 不需要将 UIScrollView.delaysContentTouches 设置为 false?

Posted

技术标签:

【中文标题】为啥 UIButton.showsTouchWhenHighlighted 不需要将 UIScrollView.delaysContentTouches 设置为 false?【英文标题】:Why is setting UIScrollView.delaysContentTouches to false not necessary for UIButton.showsTouchWhenHighlighted?为什么 UIButton.showsTouchWhenHighlighted 不需要将 UIScrollView.delaysContentTouches 设置为 false? 【发布时间】:2021-02-16 23:47:29 【问题描述】:

我正在为 UIButton 的正常状态和突出显示状态设置图像。但是,由于它在 UIScrollView 中,除非我将滚动视图的 delaysContentTouches 设置为 false,否则除非用户长按按钮,否则按钮的突出显示状态不会显示。

延迟内容触摸并不理想,因为用户无法在按钮顶部启动滚动手势。

但是,UIButton.showsTouchWhenHighlighted 似乎能够在点击时立即显示突出显示的状态,而无需将 delaysContentTouches 设置为 false。有没有办法使用 UIButton 为其图像获得相同的行为?

【问题讨论】:

【参考方案1】:

由于似乎UIButton.showsTouchWhenHighlightedUIControl.State.highlighted 对“突出显示”的含义有不同的标准,我最终制作了一个自定义UIButton 覆盖setImage 以简单地将图像保存在自定义属性中并覆盖touchesBegan/touchesEnded/touchesCancelled 调用super.setImage 并实际设置图像(仅设置.normal)。我只是使用.normal 并完全忽略.highlighted,因为state 的行为不像我想要的那样(showsTouchWhenHighlighted 的行为方式)。

【讨论】:

以上是关于为啥 UIButton.showsTouchWhenHighlighted 不需要将 UIScrollView.delaysContentTouches 设置为 false?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?