UITextField dans UISearchBar dans iOS 7
Je suis en train de faire la même apparence de mon UISearchBar avec un Champ de texte à l'intérieur, comme dans mon iOS 6 app. J'ai essayé de code de plusieurs manières, et n'ont pas encore été couronnés de succès. Le problème est, je ne suis pas en mesure de modifier le Champ de l'image depuis iOS 7. Le résultat est, ma TextField prend toute la place dans la NavigationBar et remplace la UIBarButtonItem (bouton menu) vers la droite. Voir les photos ci-dessous:
Captures d'écran http://oi44.tinypic.com/2ufewx0.jpg
iOS 6 code: C'est la façon dont j'ai codé dans iOS 6, où j'ai pu choisir les objets textfield cadre de ce que j'ai aimé!
UITextField *sbTextField = (UITextField *)[searchBar.subviews lastObject];
[sbTextField removeFromSuperview];
CGRect rect = searchBar.frame;
rect.size.height = 32;
rect.size.width = 210;
sbTextField.frame = rect;
[sbTextField setAutoresizingMask:UIViewAutoresizingFlexibleBottomMargin];
UIBarButtonItem *searchBarNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:sbTextField];
[[self navigationItem] setLeftBarButtonItem:searchBarNavigationItem];
Le résultat à partir du code ci-dessus dans iOS 7: ![iOS 7 regarder]
iOS 7 code: La différence dans iOS 7, c'est que vous avez besoin d'utiliser des sous-vues pour ajouter l'objet UITextField à la UISearchBar/UINavigationBar. En faisant cela, je n'ai pas encore été capable de changer son image. Actuellement, elle chevauche le menuButton à droite qui peut être vu dans la photo ci-dessous du présent code...
UITextField* sbTextField;
CGRect rect = subView.frame;
rect.size.height = 32;
rect.size.width = 115;
for (UIView *subView in self.searchBar.subviews){
for (UIView *ndLeveSubView in subView.subviews){
if ([ndLeveSubView isKindOfClass:[UITextField class]])
{
sbTextField = (UITextField *)ndLeveSubView;
sbTextField.backgroundColor =[UIColor whiteColor];
UIBarButtonItem *searchBarNavigationItem = [[UIBarButtonItem alloc] initWithCustomView:sbTextField];
sbTextField.frame = rect;
self.navigationItem.leftBarButtonItem = searchBarNavigationItem;
self.navigationItem.rightBarButtonItem = menuButton;
[sbTextField removeFromSuperview];
break;
}
}
}
[self.searchBar reloadInputViews];
ALORS...Est-il possible de modifier une sous-vue de l'image (TextField) de toute façon ? 🙁
MODIFIER
La réponse est un peu boiteux. Afin de rendre le code du travail dans ios7 avec un bouton à droite du Champ, le Champ doit être défini comme le titleView de la navigationBar. Ce qui n'était pas le cas dans ios 6. Mais il y aura d'autres problèmes et il n'est pas recommandé d'utiliser TextField dans searchBars dans iOS7. Utilisation searchDispalyController à la place. Se ma réponse ci-dessous
self.navigationItem.titleView = sbTextField;
source d'informationauteur user1293618
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas mettre un
UITextField
dans leUINavigationBar
dans iOS 7, ce widget est déjà fourni par Apple.Dans iOS 7, vous pouvez simplement utiliser un
UISearchDisplayController
avec unUISearchBar
et set:La barre de recherche apparaîtra dans votre
UINavigationBar
et il va jouer gentil avec les autresUIBarButtonItem
s sans tous les hacks et manuel de la taille des images dans votre original iOS 6 solution.Une chose à noter - si vous allez à ajouter à un projet qui prend toujours en charge les Systèmes d'exploitation plus anciens que iOS 7, vous voulez vous assurer que vous mettez une case autour de l'appel ou de votre application crash lors de l'exécution sur les Systèmes plus anciens.
Voir cette section de l'iOS 7 guide de transition:
https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/Bars.html
Une autre note -, vous devriez envisager la migration de mise en page automatique d'aller de l'avant de sorte que vous n'avez pas à faire tout ce qui fastidieux cadre de la manipulation. Apple recommande, et probablement pour de bonnes raisons (les futurs appareils avec des écrans plus grands...?)
dans iOS 7 pour accéder Champ de Texte que vous avez à réitérer sur le niveau de plus. Modifier votre code comme ceci
Mais la meilleure façon d'effacer le cadre de UISearchBar et réglage de l'icône de la barre de recherche dans le champ de texte est:
Créer une UIView *textFieldContainer avec votre image cible, ajoutez votre textfield pour que UIView puis ajouter que textFieldContainer comme un élément de la navigation. c'est à dire votre démarche reste la même, juste le textfield vient à l'intérieur d'un conteneur et à vous de jouer avec ce conteneur.
Essayer, je ne suis pas sûr, mais cela doit fonctionner que dans iOS 7 barre de recherche a sous-vue et à l'intérieur de cette sous-vue il y a deux sous-vues dont l'un est UITextField
iOS6 & iOS7 une solution compatible:
Swift solution
Merci à spotdog13. J'ai finalement réussi à le faire fonctionner pour iOS 7 correctement de la manière suivante: