giải pháp Các @etayluz 's là tốt hơn (quan điểm của tôi), bởi vì bạn không cần phải lo lắng về việc gán văn bản placeholder'a lại . Nếu bạn có textfields tùy chỉnh ở những nơi khác nhau của ứng dụng của bạn và muốn họ cư xử như nhau (như tôi cần trong trường hợp của tôi), bạn có thể thêm mã này vào lớp TextField tùy chỉnh của bạn:
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")
}
}
Nhưng nếu bạn cần phải có phương pháp cụ thể UITextFieldDelegate cho TextField cá nhân bạn cần phải thực hiện logic này cho nó riêng lẻ:
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")
}
}
Nguồn
2016-07-12 10:54:50
Trong phương pháp thứ hai, bạn phải kiểm tra xem trường văn bản có giá trị rỗng hay không? – KingofBliss
không. Văn bản trình giữ chỗ không hiển thị nếu có văn bản "thông thường". –
Oh .. Vâng tôi quên .. :) Cảm ơn bạn đã thông tin .. – KingofBliss