UISearchBar changer la couleur du placeholder

est-ce que quelqu'un a une idée ou un exemple de code sur la façon dont je peux changer la couleur du texte du placeholder d'un UISearchBar?

38
demandé sur Artjom Zabelin 2012-08-06 15:44:25

14 réponses

pour iOS5+ utilisez l'approximation d'apparence

[[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
73
répondu Zayin Krige 2013-07-02 10:02:14

trouvé la réponse de modifier uitextfield's placeholder texte couleur programmatique

// Get the instance of the UITextField of the search bar
UITextField *searchField = [searchBar valueForKey:@"_searchField"];

// Change search bar text color
searchField.textColor = [UIColor redColor];

// Change the search bar placeholder text color
[searchField setValue:[UIColor blueColor] forKeyPath:@"_placeholderLabel.textColor"];
29
répondu Wayne Liu 2017-05-23 11:55:19

première solution est OK, mais si vous utilisez plusieurs UISearchBar, ou de créer un grand nombre d'instances, il peut échouer. La seule solution qui fonctionne toujours pour moi est d'utiliser aussi l'apparence proxy mais directement sur UITextField

   NSDictionary *placeholderAttributes = @{
                                            NSForegroundColorAttributeName: [UIColor darkButtonColor],
                                            NSFontAttributeName: [UIFont fontWithName:@"HelveticaNeue" size:15],
                                            };

    NSAttributedString *attributedPlaceholder = [[NSAttributedString alloc] initWithString:self.searchBar.placeholder
                                                                                attributes:placeholderAttributes];

    [[UITextField appearanceWhenContainedIn:[UISearchBar class], nil] setAttributedPlaceholder:attributedPlaceholder];
14
répondu Marcin Małysz 2015-04-03 11:16:16

Voici une Solution pour Swift:

Swift 2

var textFieldInsideSearchBar = searchBar.valueForKey("searchField") as? UITextField
textFieldInsideSearchBar?.textColor = UIColor.whiteColor()

var textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.valueForKey("placeholderLabel") as? UILabel
textFieldInsideSearchBarLabel?.textColor = UIColor.whiteColor()

Swift 3

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField
textFieldInsideSearchBar?.textColor = UIColor.white

let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel
textFieldInsideSearchBarLabel?.textColor = UIColor.white
12
répondu derdida 2016-11-07 00:50:41
if let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as ? UITextField {
    textFieldInsideSearchBar ? .textColor = UIColor.white

    if let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as ? UILabel {
        textFieldInsideSearchBarLabel ? .textColor = UIColor.white

        if let clearButton = textFieldInsideSearchBar ? .value(forKey: "clearButton") as!UIButton {

            clearButton.setImage(clearButton.imageView ? .image ? .withRenderingMode(.alwaysTemplate),
                for : .normal)
            clearButton.tintColor = UIColor.white
        }
    }

    let glassIconView = textFieldInsideSearchBar ? .leftView as ? UIImageView

    glassIconView ? .image = glassIconView ? .image ? .withRenderingMode(.alwaysTemplate)
    glassIconView ? .tintColor = UIColor.white
}
7
répondu phitsch 2017-08-08 08:25:14

essayez ceci:

[self.searchBar setValue:[UIColor whatever] forKeyPath:@"_searchField._placeholderLabel.textColor"];

vous pouvez également définir cela dans storyboard, sélectionnez Barre de Recherche, Ajouter une entrée sous attributs D'exécution définis par L'utilisateur:

_searchField._placeholderLabel.textColor

de type couleur et sélectionnez la couleur dont vous avez besoin.

2
répondu Borzh 2015-01-26 14:29:04

Swift 3

UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.white
2
répondu Shoaib 2017-02-01 18:27:06

c'est un vieux poteau, mais s'il Vous Plaît vérifier ce poteau pour une solution appropriée iPhone UITextField - Changer le texte de l'espace réservé de la couleur

1
répondu Ayoub Khayati 2017-05-23 11:33:25

essayez ceci et voyez: (j'ai testé ci - dessous le code avec Swift 4.1- Xcode 9.3-beta4 )

@IBOutlet weak var sbSearchBar: UISearchBar!

if let textfield = sbSearchBar.value(forKey: "searchField") as? UITextField {

    textfield.backgroundColor = UIColor.yellow
    textfield.attributedPlaceholder = NSAttributedString(string: textfield.placeholder ?? "", attributes: [NSAttributedStringKey.foregroundColor : UIColor.red])

    textfield.textColor = UIColor.green

    if let leftView = textfield.leftView as? UIImageView {
        leftView.image = leftView.image?.withRenderingMode(.alwaysTemplate)
        leftView.tintColor = UIColor.red
    }
}

voici le résultat:

enter image description here

1
répondu Krunal 2018-03-15 14:16:26

après avoir interrogé quelques réponses, je sors ceci, j'espère son aide

for (UIView *subview in searchBar.subviews) {
    for (UIView *sv in subview.subviews) {
        if ([NSStringFromClass([sv class]) isEqualToString:@"UISearchBarTextField"]) {

            if ([sv respondsToSelector:@selector(setAttributedPlaceholder:)]) {
                ((UITextField *)sv).attributedPlaceholder = [[NSAttributedString alloc] initWithString:searchBar.placeholder attributes:@{NSForegroundColorAttributeName: [UIColor whiteColor]}];
            }
            break;
        }
    }
}
0
répondu Js Lim 2015-05-19 05:38:22

mettez ceci dans viewDidLoad de votre viewController (travaillant sur iOS 9):

UITextField *searchField = [self.searchBar valueForKey:@"_searchField"]; //self.searchBar is mine targeted searchBar, replace with your searchBar reference

// Change search bar text color
searchField.textColor = [UIColor whiteColor];

// Change the search bar placeholder text color
[searchField setValue:[UIColor whiteColor] forKeyPath:@"_placeholderLabel.textColor"];

//Change search bar icon if needed
[self.searchBar setImage:[UIImage imageNamed:@"searchIcon"]
   forSearchBarIcon:UISearchBarIconSearch
              state:UIControlStateNormal];
-1
répondu Boris Nikolić 2015-11-16 01:27:38

cette solution fonctionne sur Xcode 8.2.1. avec Swift 3.0. :

extension UISearchBar
{
    func setPlaceholderTextColorTo(color: UIColor)
    {
        let textFieldInsideSearchBar = self.value(forKey: "searchField") as? UITextField
        textFieldInsideSearchBar?.textColor = color
        let textFieldInsideSearchBarLabel = textFieldInsideSearchBar!.value(forKey: "placeholderLabel") as? UILabel
        textFieldInsideSearchBarLabel?.textColor = color
    }
}

exemple d'utilisation:

searchController.searchBar.setPlaceholderTextColorTo(color: mainColor)
-1
répondu Darkwonder 2017-02-24 10:43:00

c'est une vieille question, mais pour quiconque trébuchant dessus de nos jours, vous pouvez changer l'icône de recherche sur iOS 8.x-10.3 utilisant le texte suivant:

[_searchBar setImage:[UIImage imageNamed:@"your-image-name"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];

en ce qui concerne la couleur du texte, vous pouvez vérifier mon autre réponse, qui utilise une catégorie, ici: UISearchBar changer la couleur du texte

-1
répondu m_katsifarakis 2017-06-02 12:51:54

essayez ceci:

  UITextField *searchField = [searchbar valueForKey:@"_searchField"];
  field.textColor = [UIColor redColor]; //You can put any color here.
-2
répondu Ankit 2012-08-06 13:24:04