2012-02-11 13 views
27

È possibile personalizzare l'immagine del pulsante di cancellazione in un UITextField? Ho uno sfondo scuro nel campo di testo e la "x" non è abbastanza visibile.Personalizzato UITextField tasto di cancellazione

+0

di poter postare un esempio di come si fosse fatto questo? – Gargo

+0

Ecco il [collegamento alla mia soluzione] (http://stackoverflow.com/a/39905621/3385411) in Swift 3. Dovrebbe funzionare per il tuo scopo. – AndreasLukas

risposta

44

È possibile impostare il proprio pulsante di cancellazione personalizzato sulla proprietà rightView del campo di testo. Assicurati di impostare la proprietà rightViewMode su UITextFieldViewModeWhileEditing o UITextFieldViewModeAlways, qualunque sia la soluzione giusta per il tuo caso.

Se la posizione del pulsante non è adatta alle proprie esigenze, è possibile eseguire la sottoclasse di UITextField e ignorare il metodo rightViewRectForBounds:.

La documentazione dice il predefinito per la proprietà clearButtonMode è UITextFieldViewModeNever, ma ho il sospetto Interface Builder può impostare per UITextFieldViewModeWhileEditing - Assicurarsi di impostare al "mai" valore in modo che non appare.

Tutte queste proprietà sono documentate in UITextField Class Reference.

+2

Questo dovrebbe essere più semplice della sottoclasse di UITextField come proposto da Sebastian. – Francesco

+4

Nota: Sembra che 'rightViewMode' e' clearButtonMode' abbiano 'UITextFieldViewModeAlways' che si comportano diversamente. Quest'ultimo non mostrerà la vista quando il campo è vuoto, mentre il primo lo farà. – samvermette

+3

La proprietà rightView sarà solo una vista. Dovrai aggiungere un UIButton e implementare ancora i tuoi metodi chiari. –

0

Un approccio sarebbe quello di creare un numero personalizzato UITextField che ha l'immagine desiderata come sottoview e cancella il campo di testo genitore quando viene toccato. Disabilita il pulsante predefinito e aggiungi il tuo comportamento personalizzato in questo campo di testo personalizzato.

Questo dovrebbe iniziare. Se ci sono altre domande concrete, sentiti libero di modificare la tua domanda o commento qui se si tratta di un problema minore.

33

È possibile accedere a tale struttura utilizzando KVO:

UIButton *clearButton = [myTextField valueForKey:@"_clearButton"]; 
[clearButton setImage:[UIImage new] forState:UIControlStateNormal]; 
+0

Questo funziona per me su iOS 7. –

+0

liscio! a Apple piacciono cose del genere? perché tutte le altre soluzioni che ho visto finora hanno comportato la creazione di un nuovo buttom all'interno di una vista e l'impostazione di rightview su uitextfield –

+1

@ MaximilianKörner, ho usato questo e altri KVO per accedere alle proprietà inaccessibili nella nostra applicazione e rilasciato al conservare senza problemi. – Laszlo

7

Testato iOS7.0 - 8.4

E 'possibile aggiornare il BackgroundImage di tutti i pulsanti chiari basati sul metodo UIAppearance. Purtroppo non è possibile aggiornare l'immagine del pulsante:

UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil]; 
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal]; 

Utilizzando le seguenti immagini, il risultato è la seguente tasto chiaro:

Sfondo bianco immagine @ 3x:

White clear button background

enter image description here

Nota: questo aggiornerà l'immagine di sfondo di Tutti i pulsanti contenuti in campi di testo

2

Swift 2.2 +/iOS 9+ versione di risposta di @Brody Robertson:

let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self]) 
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal) 
0

dipende @Tuss László di answer

Swift 3,0

myTextField.clearButtonMode = .whileEditing 
if let clearButton = myTextField.value(forKeyPath: "_clearButton") as? UIButton { 
    clearButton.setImage(UIImage(named:"myImage"), for: .normal) 
    clearButton.setImage(UIImage(named:"myImage"), for: .highlighted) 
} 

Ma davvero usalo con attenzione.Se Apple cambiamento implementazioni nei futuri rilasci iOS, non sarebbe il lavoro

+1

utilizzando l'API privata è un no go! – leviathan

0

Swift 3

let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self]) 
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal) 
Problemi correlati