【问题标题】:Custom UIButton subclass自定义 UIButton 子类
【发布时间】:2019-03-17 00:17:51
【问题描述】:

我正在尝试我自己的自定义 UIButton。我继承了 UIButton 类并尝试添加一些功能,这是我的代码:

import UIKit


class CustomButton: UIButton {

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
        setGradientBackground()
    }

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        fatalError("init(coder:) has not been implemented")
    }

    private func setup() {
        layer.cornerRadius = 8
    }

    private func setGradientBackground() {

        let gradientLayer = CAGradientLayer()
        gradientLayer.frame = bounds
        gradientLayer.colors = [UIColor.yellow.cgColor, UIColor.blue.cgColor]
        gradientLayer.locations = [0.0, 1.0]
        gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
        gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)

        layer.insertSublayer(gradientLayer, at: 0)
    }
}

我将它链接到我的 IBOutlet :

@IBOutlet weak var myButton: CustomButton!

什么都不适用!

【问题讨论】:

    标签: ios swift uibutton


    【解决方案1】:

    如果您在情节提要中添加按钮,则调用的初始化程序是init?(coder aDecoder: NSCoder),而不是init(frame: CGRect),因此您需要添加...

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
        setGradientBackground()
    }
    

    【讨论】:

    • 尝试在init方法中放置一个断点,看看它是否被调用。会发生什么?
    • 对不起,故事板上没有链接!你的解决方案工作..谢谢你
    【解决方案2】:

    使用func awakeFromNib()

    class CustomButton: UIButton {
    
        override func awakeFromNib() {
            super.awakeFromNib()
    
            setup()
            setGradientBackground()
        }
    
        private func setup() {
            layer.cornerRadius = 8
        }
    
        private func setGradientBackground() {
    
            let gradientLayer = CAGradientLayer()
            gradientLayer.frame = bounds
            gradientLayer.colors = [UIColor.yellow.cgColor, UIColor.blue.cgColor]
            gradientLayer.locations = [0.0, 1.0]
            gradientLayer.startPoint = CGPoint(x: 1.0, y: 1.0)
            gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.0)
    
            layer.insertSublayer(gradientLayer, at: 0)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-19
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      • 2011-08-10
      相关资源
      最近更新 更多