Swift 设置子类 UIButton ButtonType

Posted

技术标签:

【中文标题】Swift 设置子类 UIButton ButtonType【英文标题】:Swift Setting subclass UIButton ButtonType 【发布时间】:2020-01-11 22:19:11 【问题描述】:

我有一个简单的 UIButton 子类

class IconButton: UIButton 

    init(type: FontAwesomeStyle, icon: FontAwesome, color: UIColor = .black, size: CGFloat = 20) 
        super.init(frame: CGRect.zero)

        let iconAsText = String.fontAwesomeIcon(name: icon)
        let iconText = NSMutableAttributedString(string: iconAsText, attributes: [
            NSAttributedString.Key.font: UIFont.fontAwesome(ofSize: size, style: type)
        ])

        setAttributedTitle(iconText, for: .normal)
        setTitleColor(color, for: .normal)

    

    required init?(coder: NSCoder) 
        fatalError("init(coder:) has not been implemented")
    

我遇到的问题是我希望按钮具有系统按钮所具有的行为。特别是当您按住按钮时,它会改变颜色。

let button = UIButton(type: .system)

由于 buttonType 是 UIButton 的仅获取属性,而 UIButton.init(type: UIButton.ButtonType) 是便利初始化器,我不知道如何实现这个子类。

【问题讨论】:

【参考方案1】:

仍然不确定是否可以在子类中复制 .system 按钮类型,但获得我想要的行为的解决方案如下:

class IconButton: UIButton 

    override var isHighlighted: Bool 
        willSet(newVal) 
           if newVal != isHighlighted 
               // newVal is true when the button is being held down

           
        
    

    // Rest of class...

【讨论】:

以上是关于Swift 设置子类 UIButton ButtonType的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIButton 子类并根据变量更改颜色

Swift UIButton 子类未显示在设备或模拟器上

UIButton - 如何设置最小字体大小?

Swift - UIButton 覆盖 setSelected

警告 Swift 后重新加载表

以编程方式将 UIButton 居中到 Superview 类(Swift 3)