代码之家  ›  专栏  ›  技术社区  ›  user8678879

Swift UILabel子类自动调用枚举开关函数

  •  0
  • user8678879  · 技术社区  · 8 年前

    我一直在创建一个名为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设置为。不必写moneyTitle的标题。testForLabelType()。换句话说,我希望该函数在类中自动运行。我不希望在init中插入参数,因此请避免告诉我这样做,谢谢。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Kevinosaurio    8 年前

    您可以使用didSet:

    存储新值后立即调用didSet。

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