12
votes

Couleur de texte Uiseearchbar

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: /

thx


1 commentaires

Frickin Insane Il faut tellement de piratage pour changer la couleur du texte d'une barre de recherche, Almon Apple!


11 Réponses :



10
votes

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.


2 commentaires

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.



3
votes

Voici une catégorie qui ajoute cette fonctionnalité: xxx


2 commentaires

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.



0
votes

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];
}


0 commentaires

10
votes

iOS 8: voir https://stackoverflow.com/a/28183058/308315

iOS 6 / 7: P>

[[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];


1 commentaires

Facilement la meilleure réponse



11
votes

fonctionne sur iOS 7 et plus tard:

    [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setDefaultTextAttributes:@{
                                 NSForegroundColorAttributeName : [UIColor whiteColor],
                                 NSFontAttributeName : [UIFont systemFontOfSize:15]
                                 }];


1 commentaires

Fonctionne parfaitement dans iOS 8.



0
votes

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


0 commentaires

2
votes

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]];


0 commentaires

1
votes

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]];


0 commentaires

3
votes

Pour iOS11, j'ai trouvé que cela a fonctionné:

Après avoir défini le SearchController dans le NavigiseItem , le texte de recherche était noir sur noir. Pour le faire blanc, je devais faire: xxx

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 Uisearchbar ont été largement ignorés avec une exception près: < Pré> xxx

Ceci a fait le bouton Annuler et le curseur d'insertion de texte rouge. Le texte de l'espace réservé était gris clair.

Notez que: Uisearchbar.apportArence (). Barstyle = .blackTransLuCent 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.


0 commentaires

0
votes

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;


0 commentaires