3

当用户触摸 UIButton 时,应启动高亮状态。当他将手指滑出按钮时(仍然没有抬起手指),按钮突出显示应该停止,而当他抬起手指时,按钮不应该被触发。

这种行为正是 iOS 的工作方式,但我对仍然应用高光的有效区域感到有点惊讶。对于一个小按钮,我必须在高亮停止之前将手指移动到按钮上方或下方的按钮高度数倍。

这是正常的,还是我做错了什么?高光区域应该由框架控制还是我可以设置?

4

3 回答 3

1

这是任何 UIButton 框架的正常行为,无论您选择“触摸时显示高光”属性还是不为按钮选择属性。

但是当一个人使用“信息灯”按钮时,行为会有一点变化。“信息灯”按钮的选择区域略大于其自身的大小。

于 2012-07-21T19:53:48.727 回答
0

我遇到了同样的问题,最终将 UIButton 子类化以获得所需的行为。在此示例中,我更改按钮背景以向用户显示他们何时触发按钮以及何时不触发。

override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {

    guard let touch = touches.randomElement() else { return }

    let touchPoint = touch.location(in: self)

    if self.bounds.contains(touchPoint){

        self.backgroundColor = UIColor.gray
    }
    else{

        self.backgroundColor = UIColor.lightGray
    }
}

override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {

    guard let touch = touches.randomElement() else { return }

    let touchPoint = touch.location(in: self)

    if self.bounds.contains(touchPoint){

        super.touchesEnded(touches, with: event)
        self.backgroundColor = UIColor.lightGray
    }
    else{

        super.touchesCancelled(touches, with: event)
    }
}

有趣的是,如果您编写 UIAlertController 代码,则 UIAlertAction 按钮的行为与您预期的一样:如果触摸离开按钮边界,则突出显示会消失。然而对于 UIButton 的 touchDragInside 框架比图形框架大很多。其他人建议这是为了允许笨拙和/或“胖”手指的用户。两个按钮之间的不一致很烦人。

于 2019-01-26T18:24:12.847 回答
0
button.addTarget(self, action: #selector(touchDragOutside), for: . touchDragOutside)

@objc func touchDragOutside() {
    button.isHighlighted = true
}
于 2021-12-24T07:15:56.630 回答