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{
}
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.
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.
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.
Ç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...
}
Vous pouvez vous connecter à l'événement sélectionné avec le bouton "Annuler" en vous conformant à "UISearchBarDelegate" puis en appliquant la méthode "searchBarCancelButtonClicked".
- (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];
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){
print("searchText: \(searchText)")
if searchText.count > 0
{
// Show ur content
}
else
{
// Hide your content
}
}