Подтвердить что ты не робот

Очистить текст подписи UITextField

В Xcode4 я создал некоторый текст-заполнитель для UITextField, и я бы хотел, чтобы он очищался, когда пользователь вступает в это поле.

Итак, в Инспекторе атрибутов для текстового поля я нажал кнопку "Очистить при редактировании", однако это не сразу удаляет текст при нажатии в текстовом поле (оно исчезает только при вводе текста).

Есть ли способ удалить текст заполнителя сразу при нажатии в текстовом поле?

4b9b3361

Ответ 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 = @"";