继承UITextfield的属性

时间:2016-07-19 14:52:02

标签: ios swift2

我是Swift编程的新手,我有一些具有类似属性的文本域。我可以创建一个具有已定义属性的文本字段,然后将它们扩展到其他文本字段。 numborderColor继承了borderWidthtextfield1等属性。

class TextElement: UITextField {
     var textfiedl1: UITextField = UITextField(frame:CGRectMake(38,383,299,44))
     textfield1.layer.borderColor = UIColor.grayColor().CGColor
     textfield1.layer.borderWidth = 1.0
}


class TextElement2 : UITextField {
     var num: TextElement = TextElement(frame: CGRectMake(38,416,299,44))
     required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        num.backgroundColor = UIColor.redColor()
        self.addSubview(num)
}

这不会产生任何结果。模拟器屏幕为空白。任何解决方案。

2 个答案:

答案 0 :(得分:0)

这完全脱离了我的头脑(未经测试),但我认为你想要的东西如下:

基类:

class BaseTextField: UITextField {

    init() {
        super.init(frame: CGRectZero)
        self.layer.borderColor = UIColor.grayColor().CGColor
        self.layer.borderWidth = 1.0
    }

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

子类:

class YourTextField: BaseTextField {

    init(frame: CGRect, backgroundColor: UIColor) {
        super.init()
        self.frame = frame
        self.backgroundColor = backgroundColor
    }

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

Viewcontroller中的用法:

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let textField = YourTextField(frame: CGRectMake(38, 416, 299, 44), backgroundColor: UIColor.redColor())
        self.view.addSubview(textField)
    }

}

注意:

您可能希望在required init?(coder aDecoder: NSCoder)中实际执行某些操作,但在此处我保留了默认实现。

答案 1 :(得分:0)

这里需要的是帮助对象。轻量级结构非常适合这种情况。创建一个体现配置功能的结构。为结构提供一个可以调用的方法,将self作为参数传递,允许结构配置文本字段(警告:这是Swift 3):

struct TFConfig {
    let borderColor = UIColor.gray().cgColor
    let borderWidth:CGFloat = 1.0
    func configure(_ tf:UITextField) {
        tf.layer.borderColor = borderColor
        tf.layer.borderWidth = borderWidth
    }
}

class MyTextField : UITextField {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        TFConfig().configure(self)
    }
}

// ... similarly for other text fields