UIButton高亮区域延伸到按钮外部

时间:2012-07-21 19:14:16

标签: ios uibutton touch

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

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

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

2 个答案:

答案 0 :(得分:1)

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

但是当使用“信息灯”按钮时,行为几乎没有变化。 “信息灯”按钮的选择区域略大于它自己的大小。

我希望这可以帮到你。

谢谢:)

答案 1 :(得分: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框架比图形框架大很多。其他人则建议这样做是为了允许笨拙和/或“胖”的手指用户。两个按钮之间的不一致很烦人。