soluzione l' @etayluz è meglio (il mio parere), perché non è necessario preoccuparsi di assegnare il testo di nuovo placeholder'a . Se si dispone di campi di testo personalizzati in diverse aree di vostra app e vuole che si comportino allo stesso modo (come ho bisogno nel mio caso), è possibile aggiungere questo codice alla classe del TextField personalizzato:
class CustomTextField: UITextField, UITextFieldDelegate {
private func setup() {
//do additional setup like attributedPlaceholder, inset, etc.
self.delegate = self
}
override func awakeFromNib() {
super.awakeFromNib()
setup()
}
// MARK: UITextFieldDelegate methods
func textFieldDidBeginEditing(textField: UITextField) {
textField.setValue(UIColor.clearColor(), forKeyPath: "_placeholderLabel.textColor")
}
func textFieldDidEndEditing(textField: UITextField) {
textField.setValue(UIColor.lightGrayColor(), forKeyPath: "_placeholderLabel.textColor")
}
}
Ma se avete bisogno di avere metodi specifici di UITextFieldDelegate per textField individuale che fai necessario implementare questa logica per esso individualmente:
class LoginViewController: UIViewController, UITextFieldDelegate {
@IBOutlet weak var emailTextField: CustomTextField!
@IBOutlet weak var passwordTextField: CustomTextField!
override func viewDidLoad() {
super.viewDidLoad()
textFields = [emailTextField, passwordTextField]
for textField in textFields {
textField.delegate = self
}
// MARK: UITextFieldDelegate methods
func textFieldDidBeginEditing(textField: UITextField) {
textField.setValue(UIColor.clearColor(), forKeyPath: "_placeholderLabel.textColor")
}
func textFieldDidEndEditing(textField: UITextField) {
textField.setValue(UIColor.lightGrayColor(), forKeyPath: "_placeholderLabel.textColor")
}
}
fonte
2016-07-12 10:54:50
Nel secondo metodo devi verificare che il campo di testo abbia o meno un valore vuoto? – KingofBliss
no. Il testo segnaposto non è visibile se c'è un testo "normale". –
Oh .. Sì, mi dimentico .. :) Grazie per le informazioni .. – KingofBliss