2016-01-05 15 views
5

Obecnie mam widok, taki jak nowy kanał z Facebooka, w którym posty użytkowników są wyświetlane w kolejności czasowej. Teraz po prawej stronie chcę umieścić alfabetyczny pasek przewijania, a kiedy użytkownik przewinie się do dowolnej postaci, może wyszukiwać posty użytkowników o nazwie rozpoczynającej się od tej postaci, czy jest to możliwe?Czy można wyszukać "Alfabetyczny pasek przewijania - podobny" w przypadku wyszukiwania?

Dla mojego zrozumienia, może to być rozwiązanie, jeśli zdołam przechwycić zdarzenie, gdy użytkownik przewinie do każdego znaku i przeniesie ten znak do API na serwerze, aby zapytać DB o nazwy zaczynające się od tego i opublikuj je ponownie, aby wyświetlić na urządzeniu.

Czy ktoś może mi dać jakąś wskazówkę, proszę!

+0

Powinieneś szukać "indeksu sekcji UITableView". Indeks, o którym mówisz, jest częścią iOS i dość prosty do wdrożenia. Odpowiedzi kilka razy na Stack Overflow. – Fogmeister

+0

Używając twojej metody, myślę, że widok musi być już uporządkowany w kolejności alfabetycznej, przewijanie pomaga tylko szybko przejść do każdej sekcji. Podczas gdy moje pytanie dotyczy listy uporządkowanej według daty, a kiedy ją przewiń, uporządkuj według alfabetu. – user1314404

+0

ah Widzę. Czy nie martwisz się, że łamiesz podstawowe zachowanie systemu iOS? Jeśli użytkownik zobaczy listę alfabetyczną po prawej stronie ekranu, której uczył (przez ponad 8 lat doświadczenia), jest to szybki sposób przewijania listy. Zmieniając to w sposób, który proponujesz, sprawisz, że Twoja aplikacja będzie wyglądać na uszkodzoną i zniechęci użytkowników do jej używania. – Fogmeister

Odpowiedz

5

Co chcesz zrobić, to dość nietypowe typ interfejsu użytkownika, ale jeśli naprawdę chcesz to zrobić, można wykonać następujące czynności (można znaleźć tutorial here):
w twojej tableViewController, utworzyć indeks tablica, np tablica alfabetach, które mają być wyświetlane na stronie Twojego tableView, np:

- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { 
    NSARRAY *characters = @[@" ", "A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z"]; 
    return characters; 
} 

Według docs: „tablicę łańcuchów, które służą jako tytuł rozdziału, w widoku tabeli i pojawią się na liście indeksów po prawej stronie widoku tabeli. Widok tabeli musi być w prostym stylu (UITableViewStylePlain). Na przykład dla alfabetycznej listy możesz zwrócić tablicę zawierającą ciągi od "A" do "Z". "

To wszystko zależy od ciebie, jak sortujesz swoje dane w sekcjach tableView. W twoim przypadku chcesz mieć cały czas posortowane dane w jednej sekcji, prawdopodobnie bez specjalnego nagłówka. Dlatego macierzy characters rozpoczyna się od nagłówka @" " o indeksie 0, a można umieścić cały swój czas posortowanych wpisów w sekcji 0. Następnie wdrożyć następujące metody:

- (NSInteger)tableView:(UITableView *)tableView 
       sectionForSectionIndexTitle:(NSString *)title 
       atIndex:(NSInteger)tappedIndex { 
    self.savedTappedIndex = tappedIndex; 
    return 0; 
} 

Metoda ta może być nieco mylące. Wykonuje następujące czynności: Kiedy użytkownik dotknie indeksu po stronie swojego tableView (@" " … @"Z") określonego znaku w tablicy characters, pozycja tego znaku w tablicy (jego indeksie) zostanie wprowadzona do tej metody. Możesz przechowywać go w nieruchomości. Jeśli zwrócisz 0, jak w przykładzie, sekcja 0 tabeli zostanie wyświetlona ponownie tak jak jest.
Jeśli wykonasz obserwację wartości klucza (KVO) nieruchomości savedTappedIndex, otrzymasz powiadomienie, gdy tabela zostanie wyświetlona ponownie. Następnie można odczytać charakter podsłuchu przez

NSString *tappedCharacter = characters[self.savedTappedIndex]; 

W tej postaci można zakwestionować swój serwer do pasz, które zostały utworzone przez użytkowników, których nazwa zaczyna się od tej postaci.
Dane mogą być następnie wyświetlane w tableView, ponownie w sekcji 0.
Oczywiście nie należy już wyświetlać indeksu po stronie tableView.

To zachowanie może być bardzo mylące dla użytkownika, ponieważ jest dość nietypowe.

Ostatnia uwaga:

Nie należy używać hack powyżej na prawdziwe życie, ale można go używać do testowania interfejsu użytkownika, a prawdopodobnie będzie zobaczyć, że interfejs użytkownika nie jest dobre, ponieważ indeks zachowuje się inaczej niż zwykle.

+0

Dzięki Reinhard za wspaniałą odpowiedź! To wspaniałe, że czasami możemy inaczej pomyśleć i zrealizować pomysł! Najlepiej ! – user1314404