Rozwiązanie @etayluz „S jest lepsze (moim zdaniem), ponieważ nie trzeba się martwić o przypisywaniu tekstu placeholder'a ponownie . Jeśli masz niestandardowych pól tekstowych w różnych miejscach aplikacji i chcę, żeby zachowywać się równie (jak muszę w moim przypadku) można dodać ten kod do klasy niestandardowego textField za:
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")
}
}
Ale jeśli musisz mieć specyficzne metody UITextFieldDelegate jest do indywidualnego textField trzeba zrobić, aby wdrożyć tę logikę do niego indywidualnie:
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")
}
}
W drugiej metodzie należy sprawdzić, czy pole tekstowe ma pustą wartość, czy nie? – KingofBliss
nie. Tekst zastępczy nie jest widoczny, jeśli istnieje "zwykły" tekst. –
Oh .. Tak, zapomnę .. :) Dzięki za informacje .. – KingofBliss