web-dev-qa-db-fra.com

Activer le bouton de recherche lorsque la chaîne de recherche est vide dans la barre de recherche par défaut

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.

enter image description here

Merci.

24
Ganapathy

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 :)

23
iPatel

En fait, vous pouvez simplement définir searchBar.enablesReturnKeyAutomatically = NO; Testé sur iOS 7+

30
laura

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;
  }
2
milanpanchal

Swift 3/iOS 10

for view1 in searchBar.subviews {
        for view2 in view1.subviews {
            if let searchBarTextField = view2 as? UITextField {
                searchBarTextField.enablesReturnKeyAutomatically = false
                break
            }
        }
    }
2
Alocus

searchBar.enablesReturnKeyAutomatically = NO;

2
Jim75

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;
}
1
Bhumit Mehta

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;
}
1
Ollie

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 *)searchBardelegate 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. 

enter image description here

1
Girish

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;
}
1
Taka

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;
}
1
ufmike

Version Swift simple:

if let searchTextField:UITextField = searchBar.subviews[0].subviews[2] as? UITextField {
                searchTextField.enablesReturnKeyAutomatically = false
}
0
odemolliens

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
            }
        }
    }
0
rsc