Dans mon application, j'utilise la fonctionnalité de recherche en utilisant la barre de recherche par défaut IOS. Si la chaîne de recherche est vide, toute la source de données sera affichée. Mon problème est que si je fais la chaîne de recherche vide dans la barre de recherche par défaut, le bouton de recherche vient automatiquement à cacher l'état. Je dois activer le bouton de recherche même si la chaîne est vide. Merci de me guider pour résoudre ce problème.
Merci.
S'il vous plaît écrivez le code suivant peut être utile pour vous :) Cet affichage de code Bouton de recherche / si vous avez une chaîne vide.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[self.searchBar setShowsCancelButton:YES animated:YES];
self.tblView.allowsSelection = NO;
self.tblView.scrollEnabled = NO;
UITextField *searchBarTextField = nil;
for (UIView *subview in self.searchBar.subviews)
{
if ([subview isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)subview;
break;
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Essayez-le :) Merci :)
En fait, vous pouvez simplement définir searchBar.enablesReturnKeyAutomatically = NO;
Testé sur iOS 7+
Utilisez le code suivant pour activer la clé de retour sans texte
UITextField *searchField = nil;
for (UIView *subview in searchBar.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
searchField = (UITextField *)subview;
break;
}
}
if (searchField) {
searchField.enablesReturnKeyAutomatically = NO;
}
Swift 3/iOS 10
for view1 in searchBar.subviews {
for view2 in view1.subviews {
if let searchBarTextField = view2 as? UITextField {
searchBarTextField.enablesReturnKeyAutomatically = false
break
}
}
}
searchBar.enablesReturnKeyAutomatically = NO;
C'est presque la même chose que la réponse acceptée, mais si vous travaillez avec iOS 7, vous aurez besoin d'une boucle supplémentaire en raison de certains changements dans la barre de recherche.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
[self.searchBar setShowsCancelButton:YES animated:YES];
UITextField *searchBarTextField = nil;
for (UIView *mainview in self.searchBar.subviews)
{
for (UIView *subview in mainview.subviews) {
if ([subview isKindOfClass:[UITextField class]])
{
searchBarTextField = (UITextField *)subview;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Utilisez ceci cela fonctionne pour iOS 6 et 7:
- (void)searchBarTextDidBeginEditing:(UISearchBar *)search
{
UITextField *searchBarTextField = nil;
for (UIView *mainview in search.subviews) {
if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
if ([mainview isKindOfClass:[UITextField class]]) {
searchBarTextField = (UITextField *)mainview;
break;
}
}
for (UIView *subview in mainview.subviews) {
if ([subview isKindOfClass:[UITextField class]]) {
searchBarTextField = (UITextField *)subview;
break;
}
}
}
searchBarTextField.enablesReturnKeyAutomatically = NO;
}
Créez une view
personnalisée et sur cette view
, ajoutez une button
pour supprimer le clavier. Ajoutez cette vue lorsque la méthode - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
delegate
de UISearchBar
. Cliquez sur ce bouton pour quitter le clavier ainsi que la view
que vous avez créée pour cette button
. De plus, si vous souhaitez effectuer une recherche sur ce bouton, vous pouvez également le faire. Veuillez consulter l'image pour plus de précisions.
Peut-être est un bug côté Apple?. Depuis l'activation automatique du retour du fichier .xib, la clé ne fonctionne pas comme prévu.
Ajoutez simplement le code suivant:
- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
searchBar.enablesReturnKeyAutomatically = NO;
return YES;
}
Si vous recherchez une solution un peu plus élégante, vous pouvez utiliser la récursivité pour rechercher le champ de texte dans la barre de recherche, comme indiqué ci-dessous. Cela devrait fonctionner pour iOS 6, 7, ou pour tout autre futur iOS, à moins d'une dépréciation par Apple.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
UITextField* textField = [self findTextFieldInView:searchBar];
if (textField) {
textField.enablesReturnKeyAutomatically = NO;
}
}
-(UITextField*)findTextFieldInView:(UIView*)view {
if ([view isKindOfClass:[UITextField class]]) {
return (UITextField*)view;
}
for (UIView* subview in view.subviews) {
UITextField* textField = [self findTextFieldInView:subview];
if (textField) {
return textField;
}
}
return nil;
}
Version Swift simple:
if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField {
searchTextField.enablesReturnKeyAutomatically = false
}
Voici une solution utilisant Swift. Collez-le simplement dans votre fonction viewDidLoad et assurez-vous que vous avez un IBOutlet de votre searchBar dans le code. (sur mon exemple ci-dessous, la variable inputSearchBar est l'IBOutlet)
// making the search button available when the search text is empty
var searchBarTextField : UITextField!
for view1 in inputSearchBar.subviews {
for view2 in view1.subviews {
if view2.isKindOfClass(UITextField) {
searchBarTextField = view2 as UITextField
searchBarTextField.enablesReturnKeyAutomatically = false
break
}
}
}