我尝试创建一个自定义UIButton,然后将一个普通按钮拖到我的视图中,并将Custom类属性设置为我创建的自定义UIButton类,然后我尝试通过CTRL进行操作并在创建IBAction出口后拖动它不会再注册接触了。如果我删除自定义类,那么触摸会很好,如果我再次添加它,它将不再注册触摸。
我的自定义按钮代码
import UIKit
@IBDesignable
class CustomButton: UIButton {
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
layer.masksToBounds = cornerRadius > 0
}
}
@IBInspectable var borderWidth: CGFloat = 0 {
didSet {
layer.borderWidth = borderWidth
}
}
@IBInspectable var borderColor: UIColor? {
didSet {
layer.borderColor = borderColor?.cgColor
}
}
@IBInspectable var backgroundColorOnTouch: UIColor?
@IBInspectable var textColorOnTouch: UIColor?
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
invert()
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
invert()
}
func invert() -> Void {
layer.backgroundColor = backgroundColorOnTouch?.cgColor
setTitleColor(textColorOnTouch, for: .normal)
let temp = backgroundColorOnTouch
backgroundColorOnTouch = textColorOnTouch
textColorOnTouch = temp
}
}
答案 0 :(得分:2)
UIButton是一个UIControl,已经完成了自己复杂的内置触摸检测。您的自定义UIButton子类实现了touchesBegan
和touchesEnded
,从而干扰了按钮自身的自然触摸检测。
解决方案:不要这样做。你搞砸了按钮。
如果(如图所示),您的目标是使按钮的外观根据其状态而变化(例如,当用户点击它时正常与突出显示),设置其相对于所需状态的外观。这正是国家的目的。
例如,要根据状态更改背景,请通过调用setBackgroundImage:forState:
为正常和突出显示状态提前配置按钮。要根据状态更改标题颜色,请为正常和突出显示的状态调用setTitleColor:forState:
,提前配置按钮。等等。这样配置的按钮将随着用户点击和用户释放时自动更改其背景和标题颜色。