2015-01-02 17 views
5

Zastanawiam się, czy możliwe jest aktywowanie UISearchDisplayController z przycisku na pasku nawigacji, a nie ze standardowego paska wyszukiwania, który otrzymasz, gdy wyciągniesz kontroler paska wyszukiwania z tego obiektu biblioteka w Xcode. Jak tej funkcjonalności w aplikacji Kalendarz:UISearchDisplayController z przycisku nie domyślnego pola wyszukiwania

UISearchDisplayController in the Calendar app można uzyskać przycisk, aby zwolnić akcję tak:

[self.searchDisplayController setActive:YES animated:YES]; 

Ale trzeba jeszcze pasek wyszukiwania i animuje skąd pasek wyszukiwania jest. Idealnie chciałbym, żeby pojawił się z góry jak w gifie.

Każda pomoc bardzo ceniona. David.

+0

Po prostu utwórz pasek wyszukiwania. Ustaw ramkę na offscreen podczas ładowania. Upewnij się, że ma właściwość typu outlet. Zredukuj go, gdy klikniesz przycisk, i wydaj pierwszyResponder – soulshined

Odpowiedz

7

Stare pytanie, ale mam odpowiedź więc pomyślałem, że warto było ponowne ...

W końcu użyłem UISearchController zamiast UISearchDisplayController.

Jeśli chcesz aktywować wyszukiwanie, ale nie chcą się pasek wyszukiwania, wszystko co musisz zrobić, to włączyć wyszukiwanie przy użyciu

self.searchController.active = YES; 

a następnie, ponieważ nie ma pasek wyszukiwania trzeba realizować the presentSearchController: metody protokołu UISearchControllerDelegate samodzielnie.

- (void)presentSearchController:(UISearchController *)searchController { 
    [self.window.rootViewController presentViewController:self.searchController animated:YES completion:nil]; 
} 

Nie ma tej samej animacji, ale jestem pewien, że za pomocą zwykłej animacji kontrolera widoku api mogę uzyskać coś podobnego działającego.

+0

dzięki za pomocną odpowiedź. Czy występuje również problem, że klawiatura nie wyświetla się automatycznie? Próbowałem nazywać 'self.searchController.searchBar becomeFirstResponder' w różnych miejscach, ale działa to tylko po zakończeniu prezentacji animacji. Dlatego najpierw wyszukiwarka jest przesuwana, potem klawiatura jest przesuwana. Ale chcę, żeby animowały się za jednym razem. Z jakiegoś powodu, 'searchBar.canBecomeFirstResponder' jest zawsze" NIE ", zanim animacja prezentująca się zakończy. Dowolny pomysł? –

+0

Aby działał tak samo, jak w aplikacji Kalendarz, przedstawiłem kontroler wyszukiwania z tego samego kontrolera widoku, który jest jego właścicielem (np. 'Self' zamiast' self.window.rootViewController'), a także ustaw 'searchController.hidesNavigationBarDuringPresentation = false 'i' searchController.searchBar.searchBarStyle = .prominent'. – maxkonovalov