Очистить текст подписи UITextField
В Xcode4 я создал некоторый текст-заполнитель для UITextField, и я бы хотел, чтобы он очищался, когда пользователь вступает в это поле.
Итак, в Инспекторе атрибутов для текстового поля я нажал кнопку "Очистить при редактировании", однако это не сразу удаляет текст при нажатии в текстовом поле (оно исчезает только при вводе текста).
Есть ли способ удалить текст заполнителя сразу при нажатии в текстовом поле?
Ответы
Ответ 1
сделайте свой ViewController делегатом текстового поля и реализуйте эти два метода:
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.placeholder = nil;
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
textField.placeholder = @"Your Placeholdertext";
}
Ответ 2
Решение, предлагаемое Маттиасом Баучем, хорошо работает, но что происходит, когда вам приходится беспокоиться более чем о UITextField
? Теперь вам нужно определить, к какому UITextField
относится в textFieldDidEndEditing:textField
(возможно, с использованием свойства тега), что приводит к более ненужному коду и логике.
Более простое решение: просто назначьте четкий цвет текстуре-заполнителю, а когда закончите редактирование, верните его обратно к исходному цвету. Таким образом, ваш textFieldDidEndEditing:textField
не должен идентифицировать textField
, чтобы вернуть свой соответствующий текст после того, как он был аннулирован, как в решении Bauch.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[textField setValue:[UIColor clearColor] forKeyPath:@"_placeholderLabel.textColor"];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
[textField setValue:[UIColor placeholderColor] forKeyPath:@"_placeholderLabel.textColor"];
}
Ответ 3
Вы также должны проверить, нет ли заполненного текста, тогда вы должны снова разместить держатель места.
- (void)textFieldDidBeginEditing:(UITextField *)textField {
textField.placeholder = nil;
}
- (void)textFieldDidEndEditing:(UITextField *)textField
{
if ([textField.text isEqualToString:@""] || [[textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] length] == 0))
{
[textField setText:@""];
textField.placeholder = @"Your Placeholdertext";
}
}
Ответ 4
используйте это.
- (void)textFieldDidBeginEditing:(UITextField *)textField{
textField.placeholder=nil;
}
не забудьте добавить делегата для текстового поля к файлу Owner.
Ответ 5
В вашем файле .h объявите функцию типа
-(IBAction)clear:(id)sender;
присоедините эту функцию к событию вашего приземления вашего UITextField
.
в вашем .m файле
-(IBAction)clear:(id)sender
{
[email protected]"";
}
Ответ 6
- (void)textFieldDidBeginEditing:(UITextField *)textField{
textField.placeholder=nil;
}
текстовое поле делегировать значение держателя места для nil
Ответ 7
Решение @etayluz лучше (мое мнение), потому что вам не нужно беспокоиться о повторном назначении текста placeholder'a.
Если у вас есть пользовательские текстовые поля в разных местах вашего приложения и вы хотите, чтобы они вел себя одинаково (как мне нужно в моем случае), вы можете добавить этот код в свой собственный класс TextField:
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")
}
}
Но если вам нужно иметь определенные методы UITextFieldDelegate для отдельного текстового поля, вам необходимо реализовать эту логику для него индивидуально:
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")
}
}
Ответ 8
В случае SWIFT 3 или более поздней версии
func textFieldDidBeginEditing(_ textField: UITextField) {
textField.placeholder = nil
}
func textFieldDidEndEditing(_ textField: UITextField) {
textField.placeholder = "Text Placeholder"
}
Ответ 9
В действии на действие "Действие" введите этот код:
txtName.placeholder = @"";