Hat jemand eine Idee oder ein Codebeispiel dazu, wie kann ich die Textfarbe des Platzhaltertextes einer UISearchBar ändern?UISearchBar ändern Platzhalterfarbe
Antwort
für iOS5+
das Erscheinungsbild Proxy
[[UILabel appearanceWhenContainedIn:[UISearchBar class], nil] setTextColor:[UIColor redColor]];
Seit meinem Post hatte ich die Antwort gefunden, und das ist tatsächlich der beste Weg, es zu tun. Sauber, einfach und es macht nichts kaputt. – csotiriou
Dies ist nicht wirklich gültig. UILabel unterstützt die Anpassung auf diese Weise nicht, da die Eigenschaft 'textColor' von UILabel nicht mit 'UI_APPEARANCE_SELECTOR' gekennzeichnet ist, wie in der Dokumentation gefordert. Siehe auch http://stackoverflow.com/questions/11839044/how-do-i-apply-uiappearance-proxy-properties-to-uilabel –
Dies funktioniert nur für mich, wenn ich einen Platzhalter in Stroyboard hinzufügen .. Direkte Einstellung Platzhalter Durch Code funktioniert nicht, wenn wir nicht einen Platzhalter im Storyboard haben .. verdrahtet – sach
Try this:
UITextField *searchField = [searchbar valueForKey:@"_searchField"];
field.textColor = [UIColor redColor]; //You can put any color here.
Ich möchte nicht die Farbe ändern der normale Text. Ich möchte die Farbe des Platzhaltertexts ändern. – csotiriou
Das ist NICHT OK! Sie greifen auf einen PRIVATE iVAR zu, wenn Sie dies tun, und dies könnte dazu führen, dass Ihre App vom App Store abgelehnt wird. –
@AlexanderW: Wenn dies nicht verwendet werden sollte, werden Sie nicht in der Lage sein, darauf zuzugreifen ... Jeder auf der ganzen Welt verwenden dieses Ding zum Ändern der Farbe des Textfelds Platzhalter Farbwechsel .... meine App wurde nie zurückgewiesen aufgrund dessen ... aber es ist nur eine Lösung, vielleicht nicht eine perfekte ..... – Ankit
Konnten Sie die Antwort von Change UITextField's placeholder text color programmatically
// 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"];
Wer hat versucht, eine App mit diesem Code einzureichen? Sollte kein großes Problem sein ... aber wer kann das sicher sagen ... – jimpic
Obwohl dieser Code funktioniert, würde ich jedem App-Submission damit vertrauen, da es Apple-Vorschriften verletzt. – csotiriou
Meine App ist in Ordnung, mit dieser Lösung Appstore zu übermitteln. :) – Senry
Es ist eine alte Post, aber bitte lesen Sie in diesem Beitrag für eine geeignete Lösung iPhone UITextField - Change placeholder text color
Try this:
[self.searchBar setValue:[UIColor whatever] forKeyPath:@"_searchField._placeholderLabel.textColor"];
Sie auch diese in Storyboard, wählen Sie Suchleiste festlegen können, fügen Sie Eintrag unter User Defined Runtime Attribute:
_searchField._placeholderLabel.textColor
vom Typ Farbe und wählen Sie die Farbe, die du brauchst.
Erste Lösung ist in Ordnung, aber wenn Sie mehrere UISearchBar verwenden oder viele Instanzen erstellen, kann es fehlschlagen. Die einzige Lösung, die für mich immer arbeiten, ist auch Proxy-Aussehen zu verwenden, sondern direkt auf 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];
Es ist die einzige Lösung, die für mich richtig funktioniert, andere Lösungen scheiterten beim Navigieren der ViewController-Hierarchie hin und her und beim Zerstören/Neuerstellen der Suchleiste – DTs
Nach ein paar Antworten befragt, ich dies herauskommen, hoffen seine Hilfe
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;
}
}
}
Ich unterklassifizierte die UISearchBar-Klasse, und dann verwendete ich einen zugewiesenen Platzhalter wie Sie. Aber in meiner Unterklasse habe ich override var Platzhalter hinzugefügt: String? { didSet { changePlaceholderColor (str: Platzhalter ?? "") } }, wenn ich den Platzhaltertext in dieser searchBar ändere, wird der Platzhaltertext automatisch die richtige Farbe haben. Wenn ich dies nicht tun würde, würde es meine Platzhalterfarbe überschreiben, wenn ich jemals einen normalen Platzhalter setzen würde. –
Hier a Lösung für 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
Setzen Sie diese in viewDidLoad Ihren Viewcontroller (Arbeits auf 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];
Ich habe den Slogan von Ihren letzten Antworten entfernt - es ist in einer Antwort hier nicht nützlich. Vielen Dank! – Undo
'[
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
}
Swift 3
UILabel.appearance(whenContainedInInstancesOf: [UISearchBar.self]).textColor = UIColor.white
Diese Lösung funktioniert auf Xcode 8.2.1. mit 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
}
}
Anwendungsbeispiel:
searchController.searchBar.setPlaceholderTextColorTo(color: mainColor)
Dies ist eine alte Frage, aber für jedermann auf sie heute stolpern, können Sie das Suchsymbol auf iOS 8.x ändern - 10.3 mit dem folgenden:
[_searchBar setImage:[UIImage imageNamed:@"your-image-name"] forSearchBarIcon:UISearchBarIconSearch state:UIControlStateNormal];
den Platzhalter-Text-Farbe betrifft, so können Sie meine andere Antwort, überprüfen, die eine Kategorie verwendet, hier: UISearchBar change placeholder color
Ich denke, diese Post Sie http helfen: // Stackoverflow. com/questions/1340224/iphone-uitextfield-change-placeholder-text-farbe – frankWhite
Ich habe es schon angeschaut. Dieser Beitrag betrifft ein UITextfield. Das Subclassing eines UITextfield und das Überschreiben der -drawPlaceholderInRect-Methode würde sicherlich helfen. UISearchBar ist jedoch keine Unterklasse von UITextfield und daher kann ich diese Methode nicht überschreiben. – csotiriou
Entschuldigung, ich weiß das nicht. UISearchBar ist eine Unterklasse von UIView, und ich denke, Sie können daraus eine Unterklasse erstellen und die Methode drawRect überschreiben, indem Sie Code aus dem vorherigen Beitrag hinzufügen. Vielleicht diese Hilfe – frankWhite