parcouru la documentation et je n'ai rien trouvé pour changer la couleur de l'UiseearchBar. Est-ce que quelqu'un sait comment le changer? Il n'y a pas de propriété TextColor: / p>
thx p>
11 Réponses :
Je soupçonne que vous pouvez utiliser des techniques décrits dans Ce message < / a> Modification du code présenté Légèrement, vous sous-classe UisearchBar: p> puis dans votre implémentation: p>
Vous pouvez effectuer ce qui suit: obtenez simplement la propriété Searchfield de la barre de recherche, puis modifiez la propriété TextColor.
UITextField *searchField = [searchbar valueForKey:@"_searchField"]; searchField.textColor = [UIColor redColor]; //You can put any color here.
Il est. Ceci n'est définitivement pas une bonne solution. Vous ne devriez jamais utiliser les propriétés privées d'Apple.
Ne pas l'utiliser! C'est une API privée et vous serez rejeté à l'Appstore.
Voici une catégorie qui ajoute cette fonctionnalité:
Cela n'a pas fonctionné dans iOS7, car Uitextfield est déplacé plus profondément dans la hiérarchie. Cela fonctionne: // hack: cela peut ne pas fonctionner dans les futures versions iOS pour (UIView * Sous-View in bar.subviews) {si ([SUBVIEW ISKINDOFLASCLASS: [UITEXTFIELD CLASS]]) {retour (UITEXTFIELD *) Sous-visVIEW; } else {pour (uIview * SUBVIEW2 dans SUBVIEW.SUBVIEWS) {Si ([SUBVIEW2 ISKINDOFCLASS: [UITEXTFIELD CLASSE]]) {retour (Uitextfield *) Sousview2; }}}}
Nouveaux développeurs iOS, ce n'est pas la solution à choisir lorsque Apple fournit une API pour définir les propriétés d'apparence. La boucle via les sous-espions est presque jamais la bonne solution.
Voici une approche plus propre:
UITextField *searchField = nil; for (UIView *v in self.searchBar.subviews) { if ([v isKindOfClass:[UITextField class]]) { searchField = (UITextField *)v; break; } } if (searchField) { searchField.textColor = [UIColor whiteColor]; }
iOS 8: voir https://stackoverflow.com/a/28183058/308315
iOS 6 / 7: P>
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
Facilement la meilleure réponse
fonctionne sur iOS 7 et plus tard:
[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{ NSForegroundColorAttributeName : [UIColor whiteColor], NSFontAttributeName : [UIFont systemFontOfSize:15] }];
Fonctionne parfaitement dans iOS 8.
modifié la catégorie suggérée par David Foster (@ David-Foster) pour travailler sur iOS 8.
static UITextField *PBFindTextFieldInView(UIView *view) { for(UIView *subview in view.subviews) { if([subview isKindOfClass:UITextField.class]) { return (UITextField *)subview; } else { UITextField* textField = PBFindTextFieldInView(subview); if(textField) { return textField; } } } return nil; } @implementation UISearchBar (Appearance) - (UITextField *)field { return PBFindTextFieldInView(self); } - (UIColor *)textColor { return self.field.textColor; } - (void)setTextColor:(UIColor *)color { self.field.textColor = color; } @end
apparenceShecontenancedin strong> est obsolète dans iOS 9, nous devons donc utiliser la méthode ci-dessous pour iOS 9 et supérieure à IOS. [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]]
setTintColor:[UIColor whiteColor]];
avec iOS 11 La barre de recherche devrait faire partie de la barre de navigation qui, comme vous pouvtirez peut-être vous attendre, ajoute toutes sortes de nouvelles "fonctionnalités".
Je pense que c'est un virus, mais j'ai trouvé que je devais faire la couleur suivante pour modifier le texte (et le bouton Annuler) Couleur: P>
self.searchController.searchBar.barStyle = UISearchBarStyleMinimal; [[UIBarButtonItem appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTintColor:[UIColor whiteColor]];
Pour iOS11, j'ai trouvé que cela a fonctionné:
Après avoir défini le C'était la seule chose qui a fonctionné pour moi. Mon application a une barre de navigation transparente pour laisser le gradient d'arrière-plan afficher à travers et je suppose que la barre de recherche prend cette apparence depuis mes paramètres d'apparence pour Ceci a fait le bouton Annuler et le curseur d'insertion de texte rouge. Le texte de l'espace réservé était gris clair. P> Notez que: SearchController CODE> dans le
NavigiseItem code>, le texte de recherche était noir sur noir. Pour le faire blanc, je devais faire: p>
Uisearchbar code> ont été largement ignorés avec une exception près: p> < Pré> xxx pré>
Uisearchbar.apportArence (). Barstyle = .blackTransLuCent code> n'a pas fonctionné - il devait être défini sur l'instance. Cela n'avait également aucun effet visible sur la barre de recherche (il était toujours transparent comme la barre de navigation); il vient de faire le texte de recherche blanc. p> p>
Après avoir défini le SearchController CODE> dans le
NAVIGIGIGIGEITEM code> pour iOS 11, j'ai trouvé que tenter de définir le
textcolor code> via
uiappearance code> pour tout
uitextfield code> dans un
uisearchbar code> n'avait aucun effet, mais une propriété d'apparence personnalisée qui a simplement appelé le texte
textcolor code> a fonctionné tout simplement bien.
UITextField *textFieldProxy = [UITextField appearanceWhenContainedInInstancesOfClasses:@[UISearchBar.class]];
textFieldProxy.textColorWorkaround = UIColor.lightGrayColor;
Frickin Insane Il faut tellement de piratage pour changer la couleur du texte d'une barre de recherche, Almon Apple!