11 Stimmen

Welches Ereignis wird aufgerufen, wenn wir die UISearchBar treffen?

In meiner Anwendung muss ich eine Aktivität ausführen, d.h. einen anderen Ansichtscontroller aufrufen, wenn ich auf ein UISearchBar klicke, das der Ansicht hinzugefügt wurde.

Was ist der beste Ansatz, um dies zu erreichen?

Eines der Dinge ist, wenn wir auf UISearchBar klicken, wird "searchBarTextDidBeginEditing" ausgelöst, aber bei meinem Szenario, wenn ich den Ansichtscontroller in "searchBarTextDidBeginEditing" aufrufe und zurückkomme, wird "searchBarTextDidBeginEditing" erneut aufgerufen, also scheint es nicht der ideale Ort zu sein, um den Ansichtscontroller aufzurufen.

Dies ist der Hauptcontroller

// Search bar
  iSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, frame.size.width, 40)];
  iSearchBar.delegate = self;
  iSearchBar.showsCancelButton = NO;
  iSearchBar.autocorrectionType = UITextAutocorrectionTypeNo;
  iSearchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth;
  [self addSubview:iSearchBar];

Wenn ich auf UISearchBar klicke, wird dies aufgerufen

   - (void)searchBarTextDidBeginEditing:(UISearchBar*)searchBar
   {
   [self ShowMySearch];
   }

In ShowMySearch rufe ich einen anderen Controller auf, nennen wir ihn Suchcontroller, auf und wenn ich diesen Suchcontroller schließe und zum Hauptcontroller zurückkehre, wird "searchBarTextDidBeginEditing" erneut aufgerufen und der Suchcontroller wird erneut aufgerufen, was zu Problemen führt. Dieses Verhalten tritt nur bei 3.1.1 auf.

Vielen Dank,

Sagar

18voto

Eric MORAND Punkte 6255

Ich denke, dass das Aufrufen von [self ShowMySearch] in "searchBarTextDidBeginEditing" etwas zu spät ist. Ich vermute, dass "searchBarTextDidBeginEditing" aufgerufen wird, wenn die Suchleiste zum ersten Mal zum ersten Responder wird. Da es der erste Responder ist, wenn der Suchcontroller aufgerufen wird, wird er wahrscheinlich erneut zum ersten Responder, wenn Ihr Suchcontroller ausgeblendet wird... und ruft somit erneut "searchBarTextDidBeginEditing" auf.

Um dies zu erreichen, würde ich Folgendes verwenden:

  • (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

Diese Methode wird aufgerufen, nachdem auf die Suchleiste getippt wurde, aber bevor sie zum ersten Responder wird. Und wenn Sie NEIN zurückgeben, wird sie niemals zum ersten Responder:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    [self ShowMySearch];
    return NO;
}

Lassen Sie mich wissen, ob das funktioniert!

2voto

Marlhex Punkte 1572

Für Swift 5.

func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
        handleShowSearchVC()
        return false
    }

    @objc func handleShowSearchVC() {
        let modalUserSearchController = UserSearchController(collectionViewLayout: UICollectionViewFlowLayout())
        modalUserSearchController.modalPresentationStyle = .overCurrentContext

        //Mini-App-Panel.
        //vc.view.frame = CGRectMake(0, vc.view.frame.size.height - 120, vc.view.frame.size.width, 120)

        //Präsentation #1
        // present(modalUserSearchController, animated: true, completion: nil)

        //Präsentation #2
        navigationController?.pushViewController(modalUserSearchController, animated: true)
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X