2017-04-12 2 views
0

J'essaie de personnaliser la barre de recherche en utilisant la référence SearchBar déclarée ci-dessousComment accéder à la vue telle que vue d'image et étiquette dans SearchBar Reference?

@property (weak, nonatomic) IBOutlet UISearchBar *searchRef; 

, je suis en train d'accéder au UIImage de référence et UISearchBarTextFieldLabel comme indiqué dans l'image

This is the picture

Je suis l'impression de la référence des sous-vues en utilisant le code suivant

NSLog(@"%@",self.searchRef.subviews[0].subviews[1].subviews); 

mais n'obtenant pas le résultat comme prévu. Je veux l'UIImage ref ainsi que UISearchBarTextFieldLabel. Comment puis je faire ça?

+0

Vous pouvez personnaliser entièrement: https://iosdevcenters.blogspot.com/2016/07/hacking-uisearchbar-in-swift.html –

Répondre

0

Si vous avez une référence à la champ de texte, vous pouvez le transformer en UITextField, puis accéder à ses propriétés leftView et rightView. Habituellement, le leftView est la loupe UIImageView.

UITextField *textField = (UITextField *)self.searchRef.subviews[0].subviews[1]; 

// Change the search image. 
if ([textField.leftView isKindOfClass:[UIImageView class]]) { 

    UIImageView *searchImageView = (UIImageView *)textField.leftView; 

    // Do something with the image view here... 
} 

Comme une note de côté, il est recommandé de ne pas supposer que UISearchBar's vues seront toujours disposés de cette façon. Par exemple, Apple peut décider à l'avenir de modifier la hiérarchie des vues, ce qui pourrait entraîner l'échec de votre code ou son arrêt total. Si vous devez faire cela, il serait plus prudent de rechercher récursivement les sous-vues de chaque vue jusqu'à ce que vous trouviez ce que vous cherchez, au lieu d'indices de tableau codés en dur.

+0

Quelle réponse mec. Incroyable! –

0

Vous pouvez rejoindre le imageView de searchbar comme celui-ci que vous pouvez atteindre le UIImage

Objective-C

UITextField *textFieldInsideSearchBar = [self.searhBar valueForKey:@"searchField"]; 
UIImageView *imageView = (UIImageView *) textFieldInsideSearchBar.leftView; 

Swift 3 et Swift 4

let textFieldInsideSearchBar = searchBar.value(forKey: "searchField") as? UITextField 
let imageView = textFieldInsideSearchBar?.leftView as! UIImageView 
+0

Merci pour votre réponse aussi c'est correct. –