自定义 UIButton 没有点击效果
Posted
技术标签:
【中文标题】自定义 UIButton 没有点击效果【英文标题】:There is no tap effect for custom UIButton 【发布时间】:2021-07-27 19:23:48 【问题描述】:当我初始化 UIButton 时,我可以在它的 init 中提供它的类型。但是,如果我使用自定义按钮,我不能给它一个类型,因为 buttonType 属性是 get-only,我也不能把它放在 init 函数中。
class Button: UIButton
init(placeholder: String)
super.init(frame: .zero)
setTitle(placeholder, for: .normal)
setTitleColor(.white, for: .normal)
backgroundColor = colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1).withAlphaComponent(0.5)
layer.cornerRadius = 5
setHeight(50)
titleLabel?.font = .boldSystemFont(ofSize: 20)
required init?(coder: NSCoder)
fatalError("init(coder:) has not been implemented")
【问题讨论】:
【参考方案1】:是的,您不能从子类的 init 方法调用 convenience init(type buttonType: UIButton.ButtonType)
(因为子类必须调用超类的指定初始化程序),但您可以实现以下方法来创建具有系统类型的按钮:
class Button: UIButton
static func systemButton(placeholder: String) -> Button
let button = Button(type: .system)
button.setTitle(placeholder, for: .normal)
// ...
return button
【讨论】:
非常感谢。它完美地工作。但是,我有一个问题:如果我的唯一目的是设置这些属性而根本没有创建自定义按钮,那么我应该这样做还是应该为此扩展 UIButton ? 1-private let loginButton = AuthenticationButton.authButton(placeholder: "Log In")
2- private let loginButton2: UIButton = let button = UIButton(type: .system) button.authButton(placeholder: "Log In") return button ()
您可以双向使用。我可能会在没有子类化的扩展中创建一个方法,但两者都可以。以上是关于自定义 UIButton 没有点击效果的主要内容,如果未能解决你的问题,请参考以下文章
IOS自定义UIbutton,怎样让点击的有效区域集中在图标内?
在自定义单元格中点击 UIButton 不会调用 didSelectRowAtIndexPath