mrGott mrGott - 4 months ago 31
iOS Question

Create UITextField Extension in Swift with custom styling

I have several UITextFields on the view that have to look the same. I figured out that I might create an Extension that will pre-style my text fields (those that I want to have the same style).

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
}()


so most of these attributes should be included into the extension and I'd like to be able to add couple of them to it when I declare the variable.

can you help me out? I've been searching on how to create an extension but nothing seems to work out for me.

Thank you!

Answer

Create extension of UITextField like this

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
    } 
}

call this function like this

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