2014-07-25 11 views
10

W wykładzie WWDC 2014 "A Inside Inside Presentation Controllers" prezenterowie pokazali, jak skonfigurować kontroler UISearch w UITableView. Robią to ustawiając ramkę searchBontroller searchBar, a następnie ustawiając ją jako tabelę TableViewHeaderView. Niestety nie ma odpowiednika tableHeaderView dla UICollectionView. Z UISearchDisplayController byłoby to proste: utwórz pasek UISearch i dodaj go do niestandardowego nagłówka sekcji UICollectionView, a następnie zainicjuj UISearchDisplayController za pomocą paska wyszukiwania. Problem polega na tym, że nie można zainicjować kontrolera UISearch za pomocą UISearchBar, a nawet ustawić searchbar, ponieważ jest to właściwość tylko do odczytu. Domyślam się, że moje prawdziwe pytanie brzmi: jakie są moje opcje? Czy istnieje "dobry" sposób na wdrożenie wyszukiwania bez UISearchDisplayController lub UISearchController?Nie można użyć kontrolera UISearch z UICollectionView?

Odpowiedz

14

Z UISearchDisplayController, to byłoby proste: stworzyć UISearchBar i dodać go do niestandardowych sekcji nagłówka UICollectionView, a następnie zainicjować UISearchDisplayController z paska wyszukiwania

Pasek wyszukiwania w UISearchController jest stworzony dla ty. Gdy pojawi się pytanie pogląd uzupełniającego w metodzie źródła danych

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath 

dodać searchController.searchBar jako podrzędny widoku zapasowy. Nie zapomnij zadzwonić pod numer

[searchController.searchBar sizeToFit] 

w celu nadania pasku wyszukiwania odpowiedniego rozmiaru.

+0

Dziękujemy! To działało świetnie. – Januzellij

+3

to nie działa dla mnie. Czy możesz podać całą implementację? – rigdonmr

+0

Nie jestem pewien, czy to nadal jest "na czasie" sposób to zrobić, czy ktoś może potwierdzić? – Chisx

4

Moje pierwsze pytanie: Dlaczego nie można odwrócić logiki i zamiast tworzyć pasek wyszukiwania, najpierw należy utworzyć kontroler UISearchController, pobrać jego pasek wyszukiwania i dodać go do nagłówka sekcji?

Po drugie, układy widoków kolekcji nie są tak proste, jak widoki tabel. Trudno jest domyślić się, jakie są twoje zamiary dzięki układom widoków kolekcji, podczas gdy widok tabeli jest dość prosty. Tak więc w przypadku widoku kolekcji możesz dodać pasek wyszukiwania do widoku, ale animacja go do stanu aktywnego będzie wymagać trochę pracy. (Podklasa UISearchController i zwróć swój własny kontroler animacji, następnie wykonaj dowolną animację, lub po prostu zaimplementuj metody z UIViewControllerAnimatedTransitioning na swojej podklasie i nie dzwoń super, oba powinny działać)

Coś, co możesz chcieć wypróbować wyświetlanie paska wyszukiwania poza ekranem. Jest to wbudowana animacja UISearchController obsługuje, gdy funkcja setActive: jest wywoływana, a pasek wyszukiwania nie znajduje się w hierarchii widoku. Kalendarz robi to ... jest całkiem fajny. Zamiast zawsze wyświetlać gigantyczny pasek wyszukiwania, możesz ograniczyć wyszukiwanie do ikony, która napędza prezentację.

Wreszcie są błędy. Proszę zgłaszać błędy, gdy nie możesz sprawić, aby rzeczy działały tak, jak myślisz. Wiem, to zepsuta płyta, ale tak naprawdę jest koniecznością.

+1

Czy możesz podać więcej informacji na temat tego, co jest potrzebne, aby pasek wyszukiwania był wyświetlany na ekranie, tak jak sugerujesz? Próbuję to osiągnąć i nie mam radości. – wrightak

+0

@wrightak Czy próbowałeś zrobić to, o czym wspomniał: "Jest to wbudowana animacja UISearchController obsługuje, gdy funkcja setActive: jest wywoływana, a pasek wyszukiwania nie znajduje się w hierarchii widoku"? Ponieważ wydaje się to dość łatwe do wdrożenia. – OhadM

Powiązane problemy