2016-10-09 1 views
0

Ich verfolge dieses answer eine benutzerdefinierte UITextField, aber zu schaffen, ich nicht das gleiche Ergebnis könnte, ist hier, wie ich es tat:Wie UITextField anpassen?

Methode 1 (genau wie das Original Antwort):

extension UITextField { 

    func useUnderLine() { 
     let border = CALayer() 
     let borderWidth = CGFloat(1.0) 
     border.borderColor = UIColor.white.cgColor 
     border.frame = CGRect(x: 0, y: self.frame.size.height - borderWidth, width: self.frame.size.width, height: self.frame.size.height) 
     border.borderWidth = borderWidth 
     self.layer.addSublayer(border) 
     self.layer.masksToBounds = true 
    } 
} 

override func viewDidLoad() { 
    super.viewDidLoad() 

    firstTextField.useUnderLine() 
} 

Methode 2 (unter Verwendung einer benutzerdefinierten Klasse):

class CustomTextField: UITextField { 

required init?(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 

    let borderWidth = CGFloat(1.0) 
    self.layer.borderColor = UIColor.white.cgColor 
    self.layer.frame = CGRect(x: 0, y: self.frame.size.height - borderWidth, width: self.frame.size.width, height: self.frame.size.height) 
    self.layer.borderWidth = borderWidth 
    self.backgroundColor = UIColor.black 
    self.layer.masksToBounds = true 
} 
} 

Beide Verfahren zu arbeiten, scheiterte jedoch habe ich verschiedene r rgebnisse für sie:

erstes Textfeld verwendet Methode 1, die andere 3 Verwendung Methode 2

ich nur mit der unteren Zeile ein Textfeld will, wie ich das zu tun bekommen?

bearbeiten (hier, wie Steckdosen gesetzt sind):

@IBOutlet weak var firstTextField: UITextField! 
@IBOutlet weak var secondTextField: CustomTextField! { didSet { secondTextField.delegate = self } } 
@IBOutlet weak var thirdTextField: CustomTextField! { didSet { thirdTextField.delegate = self } } 
@IBOutlet weak var fourthTextField: CustomTextField! { didSet { fourthTextField.delegate = self } } 
+0

Add 'firstTextField.borderStyle = .none' Methode 1? –

+0

In Methode 2 self.backgroundColor = UIColor.black ist schwarz – user2071152

+0

Yeah schwarzer Hintergrund und weiße Grenze ist was ich will, anders als die ursprüngliche Antwort. –

Antwort

2

Wenn du bist die Storyboard mit erstellen Sie Ihre textField die folgenden Befehle verwenden:

firstTextField.borderStyle = .none 
firstTextField.layoutIfNeeded() 

let border = CALayer() 
let width = CGFloat(2.0) 
border.borderColor = UIColor.darkGray.cgColor 

print(firstTextField.frame) 
border.frame = CGRect(x: 0, y: firstTextField.frame.size.height - width, width: firstTextField.frame.size.width, height: firstTextField.frame.size.height) 
border.borderWidth = width 

firstTextField.layer.addSublayer(border) 
firstTextField.layer.masksToBounds = true 

Wenn Sie Erstellen Sie Ihre textFieldprogrammgesteuert verwenden Sie die fol Muhen:

let textField = UITextField(frame: CGRect(x: 0, y: 20, width: 100, height: 20)) 

let border = CALayer() 
let width = CGFloat(2.0) 
border.borderColor = UIColor.darkGray.cgColor 
border.frame = CGRect(x: 0, y: textField.frame.size.height - width, width: textField.frame.size.width, height: textField.frame.size.height) 

border.borderWidth = width 
textField.borderStyle = .none 
textField.layer.addSublayer(border) 
textField.layer.masksToBounds = true 

self.view.addSubview(textField) 

Gebe dir:
enter image description here

+0

Entschuldigung, ich habe deine Antwort nicht klar gesehen. Jetzt ist es geändert, aber es ist völlig schwarz –

+0

@BrightFuture, überprüfen Sie das Update wird es Ihnen helfen. –

+1

Danke, es scheint, als ob die 'layoutIfNeeded()' es funktioniert –