Personnaliser UITextfield de la UISearchbar - iOS
Je suis en train de personnaliser la zone de texte pour le UISearchbar. L'image ci-dessous montre mon travail à moitié fait.
J'ai les sous-classes de la UISearchbar et l'a appelé de mon point de vue contrôleur. Je suis en train d'essayer de supprimer ces gris foncé lignes à partir de la zone de texte. Ci-dessous est la mise en œuvre de la UISearchbar l'ajout de sous-vue de la viewcontroller.
searchbar = [[SearchBar alloc] initWithFrame:CGRectMake(35,78, 250, 17)];
searchbar.backgroundColor = [UIColor clearColor];
searchbar.layer.borderColor = [[UIColor clearColor] CGColor];
searchbar.layer.borderWidth = 0;
for(UIView *view in searchbar.subviews){
if([view isKindOfClass:[UITextField class]]){
UITextField *tf= (UITextField *)view;
tf.layer.borderColor = [[UIColor clearColor] CGColor];
tf.delegate = self;
break;
}
}
[self.view addSubview:searchbar];
searchbar.delegate = self;
UISearchBar sous-classe:
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
//Initialization code
}
return self;
}
-(void)layoutSubviews{
UITextField *searchField;
[[[self subviews] objectAtIndex:0] removeFromSuperview];
[self setTintColor:[UIColor clearColor]];
self.clipsToBounds = YES;
NSUInteger numViews = [self.subviews count];
for(int i = 0; i < numViews; i++) {
if([[self.subviews objectAtIndex:i] isKindOfClass:[UITextField class]]) {
searchField = [self.subviews objectAtIndex:i];
searchField.leftViewMode = UITextFieldViewModeNever;
searchField.backgroundColor = [UIColor clearColor];
}
}
if(!(searchField == nil)) {
searchField.backgroundColor = [UIColor clearColor];
searchField.textColor = [UIColor blackColor];
searchField.frame = CGRectMake(self.frame.origin.x,self.frame.origin.y,self.frame.size.width,self.frame.size.height-10);
[searchField setBorderStyle:UITextBorderStyleRoundedRect];
}
[super layoutSubviews];
}
Je suis en train d'essayer d'arriver à quelque chose comme ceci:
Le champ ne doit pas avoir de limites. Les icônes sont aplaties UIImageView.
OriginalL'auteur DesperateLearner | 2012-10-19
Vous devez vous connecter pour publier un commentaire.
C'est un moyen facile d'obtenir textfield de UISearchBar sous-vue de la hiérarchie et de définir ses propriétés en tant que de besoin comme
merci beaucoup Animesh...elle n'en résout mon problème.
Grâce à vous, je vais payer de la bière pour vous un jour.
Merci! J'ai utilisé pour changer le clavier pour la recherche en utilisant UITextField *txfSearchField = [_searchBar valueForKey:@"_searchField"]; [txfSearchField setKeyboardType:UIKeyboardTypeNumberPad];
est-il un moyen de changer l'encart de texte de ce champ?
OriginalL'auteur Animesh
Utiliser les options suivantes si vous ne souhaitez pas utiliser sans papiers, les caractéristiques ou l'utilisation d'une image:
réponse impressionnante.qui a résolu mon problème
OriginalL'auteur Nick H247
À partir de IOS 5, vous avez l'apparence de proxy, voir:
http://developer.apple.com/library/ios/#documentation/uikit/reference/UISearchBar_Class/Reference/Reference.html (il y a deux sections appelées "Personnalisation de l'Apparence", cocher les deux cases).
Voici un exemple de travail, il modifie tous les UISearchBars dans l'application:
OriginalL'auteur marmor
La mise en œuvre du Changement Résistant & de Haute Performance
À tous ceux qui lisent ceci et vous demandez-vous comment le champ de texte d'une barre de recherche peut être facilement accessible en Rapide; vous pouvez étendre UISearchBar pour ajouter un textField propriété en utilisant le morceau de code suivant, qui est résistant à la sous-tendent la mise en œuvre des changements et des caches de la trouvé de résultat, de sorte qu'il est de haute performance.
Si vous souhaitez modifier le nom de la propriété, assurez-vous de ne pas changer de searchField. Que mess votre barre de recherche.
return self.valueForKey("_searchField") as? UITextField
?Qui fonctionne. Je doute qu'Apple va changer la clé très bientôt, mais lors de l'utilisation de hacky solutions personnellement, je préfère trouver un moyen de le faire qui est un peu résilient sous-jacente de la mise en œuvre des changements.
J'ai édité vos modifications. Mon code était vieux, mais vous avez modifié la base de la mise en œuvre et l'a changé en quelque chose d'autre entièrement. Le cœur de ma mise en œuvre consiste à ne pas compter sur _searchField pour être résistant à la base de la mise en œuvre des changements.
OriginalL'auteur isair
Que j'ai trouvé pour iOS 10 j'ai besoin de le faire (emprunté à partir de ci-dessus et se sont rapidement adaptés)
OriginalL'auteur msjulie
Court et Simple
OriginalL'auteur Abhishek Bedi