自定义 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 没有点击效果的主要内容,如果未能解决你的问题,请参考以下文章

UIButton在点击时没有显示任何效果?

iOS UIButton设置图片动画

IOS自定义UIbutton,怎样让点击的有效区域集中在图标内?

在自定义单元格中点击 UIButton 不会调用 didSelectRowAtIndexPath

更改自定义 UIButton 的 TitleColor (iOS 8 + swift)

如何将点击动作添加到自定义 UIButton?