Je dois modifier la couleur du texte du bouton Annuler de UISearchBar
dans iOS7.
Normalement, UISearchBar
Le bouton Annuler textColor
est bleu et je souhaite changer textColor
en redColor
.
Comment puis-je le changer?
J'ai trouvé des réponses à mes propres questions.
Voici le code, ajoutez AppDelegate
si vous voulez changer tout le bouton annuler.
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:
[UIColor redColor],
UITextAttributeTextColor,
[UIColor whiteColor],
UITextAttributeTextShadowColor,
[NSValue valueWithUIOffset:UIOffsetMake(0, 1)],
UITextAttributeTextShadowOffset,
nil]
forState:UIControlStateNormal];
Rapide:
let attributes = [NSForegroundColorAttributeName : UIColor.red]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
Si vous souhaitez uniquement définir la couleur du texte du bouton, vous n'avez besoin que d'une ligne:
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor redColor]];
Une manière beaucoup plus simple ->
self.searchbar.tintColor = [UIColor darkGrayColor];
Tu peux le faire comme ça
[yourSearchBarName setTintColor:[UIColor whateverColorYouWant]];
Vous pouvez changer les sous-vues de la UISearchBar
comme ceci dans - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
UIView *view = [_searchBar.subviews objectAtIndex:0];
for (UIView *subView in view.subviews) {
if ([subView isKindOfClass:[UIButton class]]) {
UIButton *cancelButton = (UIButton *)subView;
[cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[cancelButton setTitleColor:[UIColor whiteColor] forState:UIControlStateHighlighted];
}
}
Vous pouvez formater votre bouton d'annulation de la barre de recherche comme suit
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTintColor:[UIColor whiteColor]];
[[UIBarButtonItem appearanceWhenContainedIn: [UISearchBar class], nil] setTitle:@"Your Text Here"];
J'espère que cela fonctionne pour vous.
Travaillé pour Swift 4
Utiliser la fonction appearance
du module UIAppearance
-
Méthode 1: - Afficher le bouton d'annulation au chargement avec searchBar
-
let attributes = [NSAttributedStringKey.foregroundColor : UIColor.red]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: .normal)
ou -
Méthode 2: - Afficher la couleur du bouton d'annulation après avoir cliqué sur searchBar
-
UIBarButtonItem.appearance(whenContainedInInstancesOf:[UISearchBar.self]).tintColor = UIColor.red
Swift 3:
Utilisez ce code pour définir la couleur rouge (texte, Courser, button)
searchController.searchBar.tintColor = .red
si vous voulez changer la couleur du bouton de suppression en blanc, ajoutez ce code aussi
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes([NSForegroundColorAttributeName : UIColor.white], for: .normal)
[[UISearchBar appearance] setTintColor:[UIColor redColor]];
Testé sur Swift 4
let barButtonItem = UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self])
barButtonItem.title = NSLocalizedString("Cancel", comment: "")
barButtonItem.setTitleTextAttributes([.font : UIFont.systemFont(ofSize: 15.0, weight: .medium),
.foregroundColor : #colorLiteral(red: 0.1960784314, green: 0.1960784314, blue: 0.1960784314, alpha: 1)], for: .normal)
Mon approche pour définir indépendamment le curseur et la couleur du bouton est la suivante: J'ai défini la couleur du curseur sur bleu dans le délégué d'application (-application: didFinishLaunchingWithOptions :):
[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor blueColor]];
Utilisez ensuite la couleur de la barre de recherche dans chaque contrôleur pour définir la couleur des boutons. Vous pouvez définir la couleur de teinte même sur le Storyboard.
Pour Swift 3:
self.searchController.searchBar.tintColor = UIColor.white
Pour Swift 4.2
let attributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
UIBarButtonItem.appearance(whenContainedInInstancesOf: [UISearchBar.self]).setTitleTextAttributes(attributes, for: UIControl.State.normal)
L'attribut de texte est déconseillé pour IOS 7, utilisez ci-dessous pour IOS 7 ou version ultérieure.
[[UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil] setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont fontWithName:@"Helvetica" size:17]} forState:UIControlStateNormal];
Swift 4
let uiButton = bar.value(forKey: "cancelButton") as? UIButton
uiButton?.setTitle("Cancel", for: .normal)
uiButton?.setTitleColor(UIColor.white,for: .normal)
Une alternative au UISearchBar serait le SHSearchBar . Ce framework Swift est facilement personnalisable sans piratage, open source, comporte de nombreux tests unitaires et est disponible via Cocoapods . Il faut au moins iOS 8.
Pour les personnes utilisant Swift, je devais d'abord ajouter l'extension de Eddie K
Ensuite, j'ai pu l'appeler ainsi (essentiellement ce que Sabo a fait dans la réponse acceptée):
UIBarButtonItem.appearanceWhenContainedWithin(UISearchBar.self).setTitleTextAttributes()