我是Swift编程的新手,我有一些具有类似属性的文本域。我可以创建一个具有已定义属性的文本字段,然后将它们扩展到其他文本字段。 num
从borderColor
继承了borderWidth
和textfield1
等属性。
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)
}
这不会产生任何结果。模拟器屏幕为空白。任何解决方案。
答案 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