Est-il possible de personnaliser l'image du bouton en clair dans une UITextField
? J'ai un fond de texte sombre et le "x" n'est pas assez visible.
Vous pouvez définir votre propre bouton d'effacement personnalisé sur la propriété rightView
du champ de texte. Assurez-vous de définir la propriété rightViewMode
sur UITextFieldViewModeWhileEditing
ou UITextFieldViewModeAlways
, selon vos besoins.
Si la position du bouton ne convient pas à vos besoins, vous pouvez sous-classer UITextField
et remplacer la méthode rightViewRectForBounds:
.
La documentation indique que la valeur par défaut de la propriété clearButtonMode
est UITextFieldViewModeNever
, mais je suppose qu'Interface Builder peut la définir sur UITextFieldViewModeWhileEditing
. Assurez-vous de la définir sur la valeur "never" afin qu'elle n'apparaisse pas.
Toutes ces propriétés sont documentées dans UITextField - Référence de classe .
Vous pouvez accéder à cette propriété en utilisant KVO:
UIButton *clearButton = [myTextField valueForKey:@"_clearButton"];
[clearButton setImage:[UIImage new] forState:UIControlStateNormal];
Testé iOS7.0 - 8.4
Il est possible de mettre à jour la propriété backgroundImage de tous les boutons désactivés à l'aide de la méthode UIAppearance suivante. Malheureusement, vous ne pouvez pas mettre à jour l'image du bouton:
UIButton *defaultClearButton = [UIButton appearanceWhenContainedIn:[UITextField class], nil];
[defaultClearButton setBackgroundImage:[UIImage imageNamed:@"clearButtonBkg1.png"] forState:UIControlStateNormal];
L'utilisation des images suivantes donne le bouton d'effacement suivant:
Image de fond blanc @ 3x:
Note: Ceci mettra à jour l'image de fond de TOUS les boutons contenus dans les champs de texte
Swift 2.2+/iOS 9+ version de @Brody Robertson:
let defaultClearButton = UIButton.appearanceWhenContainedInInstancesOfClasses([UITextField.self])
defaultClearButton.setBackgroundImage(UIImage(named: "ClearIcon"), forState: UIControlState.Normal)
Swift 3
let customClearButton = UIButton.appearance(whenContainedInInstancesOf: [UITextField.self])
customClearButton.setBackgroundImage(UIImage(named: "custom_cb"), for: .normal)
dépend de /Tuss László's répondre
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)
}
Mais utilisez-le vraiment avec précaution. Si Apple change d'implémentation dans les prochaines versions iOS, cela ne fonctionnerait pas
Une solution consiste à créer une variable UITextField
personnalisée qui présente l'image souhaitée en tant que sous-vue et efface le champ de texte parent lorsque vous appuyez dessus. Vous désactivez le bouton par défaut et ajoutez votre comportement personnalisé dans ce champ de texte personnalisé.
Cela devrait vous aider à démarrer. S'il y a d'autres questions concrètes, n'hésitez pas à modifier votre question ou votre commentaire ici s'il s'agit d'un problème mineur.