webentwicklung-frage-antwort-db.com.de

Taste Uisearchbar x gedrückt

Wie gehen Sie mit dem Ereignis um, wenn Sie die Taste "x" drücken?

Ich probiere diese Methode aber funktioniert nicht.

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

}

enter image description here

11
Fabio

Ich glaube nicht, dass es eine einfache Möglichkeit gibt, sich in den X-Button einzuhaken.

Sie können sich jedoch in die direkte Konsequenz einklinken: gelöschter Text.

Versuche dies:

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

Der Nebeneffekt ist, dass dieser auch aufgerufen wird, wenn Sie Ihren Text manuell löschen.

18
Eric Johnson

Ein ziemlich hackiger Weg, aber das funktioniert.

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
}

Der Erfolg dieses Codes hängt davon ab, dass beim Tippen auf die Schaltfläche "Löschen" der Suchleiste searchBar(_:shouldChangeTextIn:replacementText:) -> Bool nicht aufgerufen wird. Wenn Sie auf die Schaltfläche "Löschen" der Tastatur tippen, wird die Methode aufgerufen.

5
funct7

Ich hatte das gleiche Problem und habe versucht, das Problem mit dem Zugriff auf searchBars Unteransicht textField zu lösen, was jedoch zum Absturz meiner App führte. Mit letzter Anstrengung fand ich post .

Ein anderes Thema war, dass

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

wird zweimal aufgerufen, wenn der Abbrechen-Button angeklickt wird, siehe auch this

Und schließlich habe ich getan;

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

Das hat mein Problem gelöst.

3
Eray Diler

Das funktioniert für mich

-(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;
}

Und Sie können den TextFields-Delegaten verwenden

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

Sie können das angeklickte Ereignis "Cancel button" mit der UISearchBarDelegate-Methode verbinden und anschließend die Methode "searchBarCancelButtonClicked" implementieren

1
Vrutin Rathod

Einfachste Lösung in Swift 5.

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    if searchText.isEmpty {
        DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
            searchBar.resignFirstResponder()
        }
    }
}
0
Dejan
- (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

... funktioniert einfach

if(searchText.length==0||searchText==nil){
    [self.searchBar resignFirstResponder];
    [NSTimer scheduledTimerWithTimeInterval:0.1
                                     target:self
                                   selector:@selector(hideKeyboard)
                                   userInfo:nil
                                    repeats:NO];
}

- (void)hideKeyboard{
   [self.searchBar resignFirstResponder];
}
0
javipagan