【问题标题】:Swift UILabel subclass automatically call enum switch functionSwift UILabel 子类自动调用枚举切换函数
【发布时间】:2018-01-17 19:05:18
【问题描述】:

我一直在创建一个名为 RPLabel 的 UILabel 类,它可以缩短我所有以编程方式设置的标签的长列表。这是课程代码:

class RPLabel: UILabel {

    //    moneyTitle.frame = CGRect(x: 50, y: -50, width:XX, height: 35)  //

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)!
        self.setup()
        self.testForLabelType()

    }

    enum labelTypeEnumeration {
        case title, subtitle
    }

    var labelType = labelTypeEnumeration.title

    override init(frame: CGRect){
        super.init(frame: frame)
        self.setup()



    }



    override func awakeFromNib() {
        super.awakeFromNib()
        self.setup()

    }

    func setup(){
        self.text = self.text
        self.textColor = self.textColor
        self.font = self.font
        self.layer.display()
    }



    func testForLabelType() {

        switch labelType {
        case .title:
            setupTitle()
            print("setupTitle")
        case .subtitle:
            setupSubtitle()
            print("setupSubtitle")
        }

    }

    func setupTitle(){
        self.font = UIFont.boldSystemFont(ofSize: 12)
        self.textColor = UIColor.secondaryColor()
        self.textAlignment = .left

    }

    func setupSubtitle(){
        self.font = UIFont.boldSystemFont(ofSize: 18)
        self.textColor = UIColor.rgb(red: 200, green: 200, blue: 200)
        self.textAlignment = .left

    }



}

为了制作标签,我使用以下代码:

var moneyTitle = RPLabel()
    moneyTitle.labelType = .title
    moneyTitle.testForLabelType()
    moneyTitle.text = "MONEY"
    moneyTitle.frame = CGRect(x: 50, y: -50, width:XX, height: 35)

我遇到的问题是我想将 labelType 设置为 .title 而不必编写 moneyTitle.testForLabelType()。换句话说,我希望该功能在课堂上自动运行。我不喜欢的替代方法是在 init 中插入参数,所以请避免告诉我这样做,谢谢。

【问题讨论】:

    标签: ios swift class enums uilabel


    【解决方案1】:

    你可以使用 didSet:

    在存储新值后立即调用didSet。

    var labelType = labelTypeEnumeration.title {
        didSet {
            testForLabelType()
        }
    }
    

    【讨论】:

    • 如果您的问题被成功回答,请不要忘记接受答案=)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 2014-04-01
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多