iphone uitextfield

iphone - uitextfielddelegate



Borrar el texto del marcador de posiciĆ³n de UITextField en el grifo (10)

En Xcode4 he creado un texto de marcador de posición para un UITextField y me gustaría que se borre cuando el usuario toca en el cuadro.

Por lo tanto, en el inspector de atributos del campo de texto, he hecho clic en "Borrar cuando comienza la edición", sin embargo, esto no elimina el texto inmediatamente cuando toco en el cuadro de texto (solo desaparece cuando empiezas a escribir).

¿Hay alguna forma de eliminar el texto del marcador de posición inmediatamente al tocar en el cuadro de texto?


En caso de SWIFT 3 o posterior.

func textFieldDidBeginEditing(_ textField: UITextField) { textField.placeholder = nil } func textFieldDidEndEditing(_ textField: UITextField) { textField.placeholder = "Text Placeholder" }


En el botón de acción del evento poner este Código:

txtName.placeholder = @"";


En tu archivo .h declara una función como

-(IBAction)clear:(id)sender;

adjunte esta función a su evento de touchdown de su UITextField .

en tu archivo .m

-(IBAction)clear:(id)sender { myplaceHolderText.text=@""; }


La solución de @etayluz es mejor (mi opinión), porque no tiene que preocuparse por volver a asignar un marcador de posición. Si tiene textFields personalizados en diferentes lugares de su aplicación y desea que se comporten de la misma manera (como necesito en mi caso), puede agregar este código a su clase personalizada de 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") } }

Pero si necesita tener métodos específicos de UITextFieldDelegate para textField individual, DEBE implementar esta lógica 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") } }


La solución provista por Matthias Bauch funciona bien, pero ¿qué sucede cuando tiene que preocuparse más de un UITextField ? Ahora tiene que identificar a qué UITextField se hace referencia en textFieldDidEndEditing:textField (posiblemente mediante el uso de la propiedad de etiqueta), y eso da como resultado un código y una lógica más innecesarios.

Una solución mucho más simple: simplemente asigne un color claro al texto del marcador de posición, y cuando termine de editar, vuelva a su color original. De esta manera, su textFieldDidEndEditing:textField no tiene que identificar el textField para recuperar su texto correspondiente después de que fue anulado como en la solución de Bauch.

- (void)textFieldDidBeginEditing:(UITextField *)textField { [textField setValue:[UIColor clearColor] forKeyPath:@"_placeholderLabel.textColor"]; } - (void)textFieldDidEndEditing:(UITextField *)textField { [textField setValue:[UIColor placeholderColor] forKeyPath:@"_placeholderLabel.textColor"]; }


Si tienes más de un TextField

1) Añade una variable de cadena a tu clase

class YourViewController : UIViewController { var placeHolder = ""

2) Añadir UITextFieldDelegate

extension YourViewController : UITextFieldDelegate { func textFieldDidBeginEditing(_ textField: UITextField) { placeHolder = textField.placeholder ?? "" textField.placeholder = "" } func textFieldDidEndEditing(_ textField: UITextField) { if textField.placeholder == ""{ textField.placeholder = placeHolder } }


También debe verificar si el texto archivado está vacío, luego debe colocar el marcador de posición nuevamente.

- (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"; } }


haga que su ViewController sea el delegado del campo de texto e implemente esos dos métodos:

- (void)textFieldDidBeginEditing:(UITextField *)textField { textField.placeholder = nil; } - (void)textFieldDidEndEditing:(UITextField *)textField { textField.placeholder = @"Your Placeholdertext"; }


utilizar esta..

- (void)textFieldDidBeginEditing:(UITextField *)textField{ textField.placeholder=nil; }

no olvide agregar el delegado para el campo de texto a su propietario del archivo.


- (void)textFieldDidBeginEditing:(UITextField *)textField{ textField.placeholder=nil; }

el campo de texto delegado hace que el valor de posición sea nulo