Vous avez accès à la UITextField à l'intérieur de la UISearchBar. Vous pouvez faire cela en utilisant valueForKey("searchField")
var textFieldInsideSearchBar = yourSearchbar.valueForKey("searchField")as?UITextField
textFieldInsideSearchBar?.textColor = yourcolor
Swift 3 mise à jour
let textFieldInsideSearchBar = yourSearchbar.value(forKey:"searchField")as?UITextField
textFieldInsideSearchBar?.textColor = yourcolor
Merci! Mais est-ce que l'API publique ou privée?
Oui, c'est public.
Il n'est pas compilé. Après quelques modifications, il n'a, mais alors jeté une erreur d'exécution se plaindre "Tableau d'index out of range" et si je le change à la sous-vue[0] c'est une UIView qui ne peut pas être utilisé pour un champ de texte. Notez que je suis en utilisant Swift 1.2 si cela a quelque chose à faire. Merci et désolé pour la réponse tardive.
J'ai édité ma réponse. Vous pouvez accéder au champ en utilisant valueforkey("searchField")
Très bien fonctionne très bien! Juste un mineur, vous devez déballer textFieldInsideSearchBar?.textColor = yourcolor pour accéder à textColor Merci man!
Comment avez-vous trouver le nom de la searchField valeur ? J'aimerais changer la police du bouton annuler, mais je ne trouve pas la valeur pour elle.
ne fonctionne pas du tout ---- Terminaison d'application en raison de uncaught exception 'NSUnknownKeyException', la raison: '[<UITableView 0x1694bc00> valueForUndefinedKey:]: cette classe n'est pas la valeur de la clé de codage conforme à la clé searchField.'
Il n'est pas privé de l'API, mais il est très fragile et peut se casser sur toute mise à jour d'iOS. Vous ne devriez jamais utiliser des choses comme celles-ci dans le code de production
ce n'est pas API publique!!!
Avez-vous vérifié combien de temps il y a cette réponse a été posté? Il est possible qu'il ne fonctionne plus. Hésitez pas à montrer une autre approche.
il n'a pas d'importance lorsque l'original de la réponse a été posté, il repose toujours sur l'API privée. Si elle est publique, vous n'avez pas besoin d'accéder à searchField par KVC.
Downvote. Voir @juanjo la réponse de mon commentaire pour un beaucoup plus robuste à l'approche approuvée par Apple et beaucoup moins susceptibles de se briser.
N'utilisez pas cette réponse, vous accédez à des Api privées et il pourrait devenir votre application rejeté.
Si vous souhaitez définir la couleur du texte pour UISearchBar dans le storyboard (sans code), il est facile de faire aussi bien (dans l'identité de l'inspecteur). Voici un texte en rouge pour la barre de recherche.
Il est préférable d'avoir moins de code pour l'affichage des éléments. Merci.
Si vous avez seulement besoin pour le rendre lisible sur un fond sombre, vous pouvez changer la barStyle. Le suivant fait de texte et des boutons dans la barre de recherche blanc:
Je l'écris dans le AppDelegate mais je suppose que cela fonctionne si vous la mettre quelque part d'autre aussi.
C'est beaucoup plus robuste que la clé-valeur non-sens dans la accepté de répondre et d'autres réponses. Toutefois, Apple, dans sa sagesse, a retiré de l'API que vous utilisez ici et vous propose une nouvelle version pour iOS 9.0 et au-dessus, comme suit: [[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor blueColor]]; C'est bien sûr, Objective-C, avec d'évidentes traduction de Swift à l'aide de appearance(whenContainedInInstancesOf:)
Ne semble pas fonctionner pour moi dans Xcode 10, iOS 12, sur un périphérique réel.
Depuis Xcode 11 et iOS 13, il est devenu possible d'accéder au champ de texte directement:
searchBar.searchTextField
Vous pouvez écrire du code pour le rendre accessible ce genre.
extensionUISearchBar{publicvar textField:UITextField?{if#available(iOS13.0,*){return searchTextField
}guardlet firstSubview = subviews.first else{
assertionFailure("Could not find text field")returnnil}for view in firstSubview.subviews {iflet textView = view as?UITextField{return textView
}}
assertionFailure("Could not find text field")returnnil}}
Vous pouvez également en faire il pas une option avec des erreurs fatales, ce code est testé depuis iOS 7 à iOS 13GM. Mais je voudrais juste aller pour la version optionnelle.
extensionUISearchBar{publicvar textField:UITextField{if#available(iOS13.0,*){return searchTextField
}guardlet firstSubview = subviews.first else{
fatalError("Could not find text field")}for view in firstSubview.subviews {iflet textView = view as?UITextField{return textView
}}
fatalError("Could not find text field")}}
Vous pouvez le faire en accédant à l'objet UITextField à l'intérieur de la barre de recherche,
ensuite, vous pouvez changer sa couleur de fond, couleur du texte, et tous les autres UITextField propriétés
ajouter l'extension suivante pour accéder à la textField
extensionUISearchBar{///Return text field inside a search bar
var textField:UITextField?{let subViews = subviews.flatMap { $0.subviews }guardlet textField =(subViews.filter { $0isUITextField}).first as?UITextFieldelse{returnnil}return textField
}}
Ici est un Xamarin.iOS version C# de "trouver l'objet UITextField" approche. Il ne sera pas en panne si l'objet UITextField disparaît dans le futur iOS afficher la hiérarchie.
var tf = searchBar.AllSubViews().FirstOrDefault(v => v isUITextField);if(tf != null)(tf asUITextField).TextColor=UIColor.White;publicstaticIEnumerable<UIView>AllSubViews(this UIView view){
foreach (var v in view.Subviews){
yield return v;
foreach (var sv in v.AllSubViews()){
yield return sv;}}}
Vous avez accès à la
UITextField
à l'intérieur de la UISearchBar. Vous pouvez faire cela en utilisantvalueForKey("searchField")
Swift 3 mise à jour
searchField
par KVC.Si vous souhaitez définir la couleur du texte pour UISearchBar dans le storyboard (sans code), il est facile de faire aussi bien (dans l'identité de l'inspecteur). Voici un texte en rouge pour la barre de recherche.
De travail dans Swift 4 pour moi:
Swift 4.2, IOS 12:
Si vous avez seulement besoin pour le rendre lisible sur un fond sombre, vous pouvez changer la barStyle. Le suivant fait de texte et des boutons dans la barre de recherche blanc:
Le moyen le plus simple je pense est de définir un
textColor
propriété dansUISearchBar
.Utilisation
Que vous pouvez l'utiliser comme:
Cela fonctionne pour moi sur iOS 11, Xcode 9:
Je l'écris dans le
AppDelegate
mais je suppose que cela fonctionne si vous la mettre quelque part d'autre aussi.[[UITextField appearanceWhenContainedInInstancesOfClasses:@[[UISearchBar class]]] setTextColor:[UIColor blueColor]];
C'est bien sûr, Objective-C, avec d'évidentes traduction de Swift à l'aide deappearance(whenContainedInInstancesOf:)
Depuis Xcode 11 et iOS 13, il est devenu possible d'accéder au champ de texte directement:
Vous pouvez écrire du code pour le rendre accessible ce genre.
Vous pouvez également en faire il pas une option avec des erreurs fatales, ce code est testé depuis iOS 7 à iOS 13GM. Mais je voudrais juste aller pour la version optionnelle.
Vous pouvez le faire en accédant à l'objet UITextField à l'intérieur de la barre de recherche,
ensuite, vous pouvez changer sa couleur de fond, couleur du texte, et tous les autres UITextField propriétés
ajouter l'extension suivante pour accéder à la textField
(Cette solution uniquement testé pour Xcode 10 & iOS 12.) Ajouter une extension pour accéder à la barre de recherche du champ de texte:
Puis utiliser cette propriété pour définir la couleur du texte du champ de texte dans votre barre de recherche:
Dans ma situation, la solution est
Ici est un Xamarin.iOS version C# de "trouver l'objet UITextField" approche. Il ne sera pas en panne si l'objet UITextField disparaît dans le futur iOS afficher la hiérarchie.
Obj-C
Swift 4.x