Chiaro UITextField testo Segnaposto a toccare

In Xcode4 ho creato qualche testo segnaposto per un UITextField e mi piacerebbe che chiaro quando l’utente tocca nella casella.

Così, negli Attributi di Ispezione per il campo di testo ho cliccato su “Cancella quando si modifica inizia” tuttavia questo non rimuovere immediatamente il testo, quando mi toccare la casella di testo (solo scompare quando si inizia a digitare).

C’è qualche modo per rimuovere il testo segnaposto immediatamente toccando la casella di testo?

InformationsquelleAutor Snowcrash | 2011-12-16



10 Replies
  1. 67

    rendere il vostro ViewController il delegato del textField e per implementare questi due metodi:

    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        textField.placeholder = nil;
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        textField.placeholder = @"Your Placeholdertext";
    }
    • Nel secondo metodo, assicurarsi che il campo di testo ha valore vuoto o no?
    • nope. Il testo segnaposto, solo che non è visibile se non c’è “regolare” del testo.
    • Oh.. Sì, ho dimenticate.. 🙂 Grazie per le info..
    • devo aggiungere il codice nella mia risposta per controllare è il campo di testo è vuota o non
    • Cordiali saluti, c’è un bug su iOS 7.0 quando si imposta UITextField come allineato al centro, ricevuto un segnaposto per esso, quindi deselezionare la segnaposto (sia nullo o @””). Iniziare a modificare UITextField, si trova il cursore in una strana posizione.
    • Cordiali saluti, il bug è ancora presente in iOS 8.0

  2. 8

    La soluzione fornita da Matthias Bauch funziona bene, ma cosa succede quando si dispone di più di un UITextField di cui preoccuparsi? Ora è necessario identificare quali UITextField è di cui al textFieldDidEndEditing:textField (possibilmente con l’uso del tag di proprietà), e che si traduce in più inutili codice e la logica.

    Una soluzione molto più semplice: è sufficiente assegnare un colore chiaro per il testo segnaposto , e una volta terminata la modifica, tornare al suo colore originale. In questo modo, il vostro textFieldDidEndEditing:textField non hanno per identificare il textField per impostare di nuovo la sua corrispondente testo dopo che è stata annullata in Bauch soluzione.

    - (void)textFieldDidBeginEditing:(UITextField *)textField {
        [textField setValue:[UIColor clearColor] forKeyPath:@"_placeholderLabel.textColor"];
    }
    
    - (void)textFieldDidEndEditing:(UITextField *)textField {
        [textField setValue:[UIColor placeholderColor] forKeyPath:@"_placeholderLabel.textColor"];
    }
    • Questo potrebbe causare app store rifiuto per l’utilizzo di API private
  3. 3

    Si dovrebbe anche controllare se il testo presentato è vuoto allora si dovrebbe mettere il segnaposto di nuovo

    - (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. 1

    uso questo..

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

    non dimenticare di aggiungere il delegato per il textfield per il Proprietario del file.

  5. 1

    Se si dispone di più di un TextField

    1) Aggiungere una variabile di Stringa per la classe

    class YourViewController : UIViewController {
    
    var placeHolder = ""

    2) Aggiungere UITextFieldDelegate

    extension YourViewController : UITextFieldDelegate {
    
    func textFieldDidBeginEditing(_ textField: UITextField) {
        placeHolder = textField.placeholder ?? ""
        textField.placeholder = ""
    }
    
    func textFieldDidEndEditing(_ textField: UITextField) {
        if textField.placeholder == ""{
        textField.placeholder = placeHolder
        }
    }
  6. 0
    - (void)textFieldDidBeginEditing:(UITextField *)textField{
        textField.placeholder=nil;
    }

    textfield delegato rendere il posto di titolare di un valore pari a zero

  7. 0

    L’ @etayluz ‘s soluzione è migliore (a mio parere), perché non c’è bisogno di preoccuparsi di assegnazione segnaposto a testo.
    Se si dispone di campi di testo personalizzato in diversi luoghi della tua app e desidera loro di comportarsi allo stesso modo (come ho bisogno nel mio caso) si può aggiungere codice personalizzato TextField classe:

    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")
        }
    }

    Ma se avete bisogno di specifici UITextFieldDelegate metodi per singoli textField è necessario implementare questa logica per farlo singolarmente:

    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. 0

    In caso di SWIFT 3 o versione successiva

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

Lascia un commento