web-dev-qa-db-fra.com

Bouton Uisearchbar x enfoncé

Comment gérer l'événement lorsque vous appuyez sur le bouton 'x'?

J'essaie cette méthode mais ne fonctionne pas.

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{

}

enter image description here

11
Fabio

Je ne pense pas qu'il existe un moyen facile de se connecter au bouton X.

Cependant, vous pouvez en tirer une conséquence directe: le texte effacé.

Essaye ça:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText == "" {
        print("UISearchBar.text cleared!")
    }
}

L'effet secondaire est qu'il est également appelé lorsque vous effacez manuellement votre texte.

18
Eric Johnson

Une façon plutôt compliquée de le faire, mais cela fonctionne.

private var didTapDeleteKey = false

func searchBar(_ searchBar: UISearchBar,
               shouldChangeTextIn range: NSRange,
               replacementText text: String) -> Bool
{
    didTapDeleteKey = text.isEmpty

    return true
}

func searchBar(_ searchBar: UISearchBar,
               textDidChange searchText: String)
{
    if !didTapDeleteKey && searchText.isEmpty {
        // Do something here
    }

    didTapDeleteKey = false
}

Le succès de ce code repose sur le fait que lorsque vous appuyez sur le bouton d'effacement de la barre de recherche, searchBar(_:shouldChangeTextIn:replacementText:) -> Bool n'est pas appelé. À la place, lorsque vous appuyez sur le bouton de suppression du clavier, la méthode est appelée.

5
funct7

J'ai eu le même problème, j'ai essayé de le résoudre en accédant à la sous-vue textField de searchBar, mais cela a provoqué le blocage de mon application et, avec un dernier effort, j'ai trouvé ce post .

Un autre problème était que,

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 

est appelé deux fois lorsque le bouton d’annulation est cliqué, voir aussi this

Et enfin ce que j'ai fait, c'est;

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (![searchText isEqualToString:self.searchText]) {
        self.searchText = searchText;
        return;
    }
    NSLog(@"Clear clicked");
}

Cela a résolu mon problème.

3
Eray Diler

Ça marche pour moi

-(UITextField*)getUITexfieldInUISearchBar:(UIView*)aSearchBar{
UITextField *searchBarTextField;
for (UIView *subView in [aSearchBar subviews]){
    if ([subView isKindOfClass:[UITextField class]])
    {
        searchBarTextField = (UITextField *)subView;
        [searchBarTextField setDelegate:self];
        break;

    }else if ([subView isKindOfClass:[UIView class]]){
        [self getUITexfieldInUISearchBar:subView];
    }
}
  return searchBarTextField;
}

Et vous pouvez utiliser le délégué TextFields

- (BOOL)textFieldShouldClear:(UITextField *)textField {
   //Do something here...
}
2
Dj tropycool

Vous pouvez vous connecter à l'événement sélectionné avec le bouton "Annuler" en vous conformant à "UISearchBarDelegate" puis en appliquant la méthode "searchBarCancelButtonClicked".

1
Vrutin Rathod
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
    if (searchText.length == 0) {
         //clear button (x) on the search bar is cliecked, so clear the table
        [self clearTable];
    }
}
0
Mona
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){
    print("searchText: \(searchText)")
    if searchText.count > 0
    {
        // Show ur content
    }
    else
    {
        // Hide your content
    }
}
0
S R Nayak