当用户触摸UIButton时,应该开始突出显示状态。当他的手指在按钮外滑动时(仍然没有抬起他的手指),按钮高亮应该停止,当他抬起手指时,按钮不应该被触发。
这种行为正是iOS的工作方式,但我对仍然应用高亮显示的有效区域感到有些惊讶。对于一个小按钮,我必须在突出显示停止之前将手指移动按钮上方或下方几倍的高度。
这是正常的,还是我做错了什么?高亮区域应该由框架控制还是我可以设置的东西?
答案 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框架比图形框架大很多。其他人则建议这样做是为了允许笨拙和/或“胖”的手指用户。两个按钮之间的不一致很烦人。