使用自定义样式在Swift中创buildUITextField扩展

我有几个UITextFields的视图必须看起来一样。 我想,我可能会创build一个扩展,预先样式我的文本字段(我想要有相同的样式)。

let passTextField: UITextField = { let tf = UITextField() //tf.backgroundColor = UIColor.blueColor() tf.translatesAutoresizingMaskIntoConstraints = false tf.layer.cornerRadius = 25 tf.layer.borderColor = UIColor(r: 34, g: 140, b: 204, a: 1).CGColor tf.layer.borderWidth = 2.0 tf.layer.masksToBounds = true /* Paddings */ tf.leftView = UIView(frame: CGRectMake(0, 0, 25, 0)) tf.leftViewMode = UITextFieldViewMode.Always tf.rightView = UIView(frame: CGRectMake(0, 0, 25, 0)) tf.rightViewMode = UITextFieldViewMode.Always /* Place Holder Formating */ let attributes = [ NSForegroundColorAttributeName: UIColor(r: 34, g: 140, b: 204, a: 1), NSFontAttributeName : UIFont(name: "HelveticaNeue-Thin", size: 16)! // Note the ! ] tf.attributedPlaceholder = NSAttributedString(string: "Email", attributes:attributes) return tf }() 

所以这些属性中的大部分都应该包含在扩展中,并且我希望能够在声明variables时添加它们中的几个。

你能帮我吗? 我一直在寻找如何创build一个扩展,但似乎没有为我工作。

谢谢!

像这样创buildUITextField extension

 extension UITextField { class func attributedTextField(frame: CGRect) -> UITextField { let textField = UITextField(frame: frame) textField.translatesAutoresizingMaskIntoConstraints = false textField.layer.cornerRadius = 25 textField.layer.borderColor = UIColor(r: 34, g: 140, b: 204, a: 1).CGColor textField.layer.borderWidth = 2.0 textField.layer.masksToBounds = true /* Paddings */ textField.leftView = UIView(frame: CGRectMake(0, 0, 25, 0)) textField.leftViewMode = UITextFieldViewMode.Always textField.rightView = UIView(frame: CGRectMake(0, 0, 25, 0)) textField.rightViewMode = UITextFieldViewMode.Always /* Place Holder Formating */ textField attributes = [ NSForegroundColorAttributeName: UIColor(r: 34, g: 140, b: 204, a: 1), NSFontAttributeName : UIFont(name: "HelveticaNeue-Thin", size: 16)! // Note the ! ] textField.attributedPlaceholder = NSAttributedString(string: "Email", attributes:attributes) return textField } } 

像这样调用这个函数

 let tf = UITextField.attributedTextField(frame: CGRect(x: 0, y: 0, width: 100, height: 100)) 

你可以用extension定义,如果方法是新的,你可以使用下面的代码,如果已经存在,则使用override方法

 extension UITextField { func underlined(){ let border = CALayer() let width = CGFloat(1.0) border.borderColor = UIColor.lightGrayColor().CGColor border.frame = CGRect(x: 0, y: self.frame.size.height - width, width: self.frame.size.width, height: self.frame.size.height) border.borderWidth = width self.layer.addSublayer(border) self.layer.masksToBounds = true } }