2016-01-05 20 views
5

Attualmente ho una vista come nuovo feed di Facebook dove post dagli utenti elencati in ordine di tempo. Ora sul lato destro voglio mettere la barra di scorrimento alfabetica e quando l'utente scorre a qualsiasi carattere, possono cercare post dagli utenti con il nome che inizia da quel personaggio, è possibile però?È possibile effettuare "Scorrimento alfabetico - allo stesso modo" per la ricerca?

Per quanto mi riguarda, potrebbe essere risolto se riesco a catturare l'evento quando l'utente scorre a ciascun carattere e trasferisce quel carattere all'API sul server per interrogare il DB con i nomi che iniziano con quello e lo posticipano alla visualizzazione sul dispositivo.

Qualcuno potrebbe darmi qualche suggerimento, per favore!

+0

Si dovrebbe cercare "Indice sezione UITableView". L'indice di cui parli fa parte di iOS e è abbastanza semplice da implementare. È stato risposto più volte su Stack Overflow. – Fogmeister

+0

Utilizzando il metodo, penso che normalmente la vista debba già essere ordinata in ordine alfabetico, lo scorrimento aiuta solo a passare rapidamente a ciascuna sezione. Mentre la mia domanda riguarda la lista ordinata per data, e quando lo si scorre riordina in ordine alfabetico. – user1314404

+0

ah vedo. Non sei preoccupato che stai infrangendo un comportamento fondamentale di iOS? Se un utente visualizza un elenco alfabetico nella parte destra dello schermo, gli è stato insegnato (con oltre 8 anni di esperienza) che è un modo rapido per scorrere l'elenco. Modificando ciò nel modo in cui lo stai proponendo, la tua app sembrerà interrotta e impedirà agli utenti di utilizzarla. – Fogmeister

risposta

5

Che cosa si vuole fare è un tipo piuttosto insolito di interfaccia utente, ma se si vuole veramente fare questo, si potrebbe procedere come segue (è possibile trovare un tutorial here):
Nella tua tableViewController, creare un indice array, ad es un array di caratteri alfabetici che si desidera visualizzare a lato della vostra tableView, per esempio:

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

Secondo il docs: “Un array di stringhe che servono come il titolo di sezioni nella vista tavolo e compaiono nell'elenco degli indici sul lato destro della visualizzazione tabella. La vista tabella deve essere in stile semplice (UITableViewStylePlain). Ad esempio, per un elenco in ordine alfabetico, è possibile restituire un array contenente le stringhe da "A" a "Z". "

Sta a te decidere come ordinare i dati nelle sezioni di tableView. Nel tuo caso, vuoi avere tutti i dati ordinati in una sezione, probabilmente senza un'intestazione speciale. Pertanto l'array characters inizia con un colpo di testa @" " indice 0, e si mette tutto il vostro tempo voci in ordine nella sezione 0. Poi, implementano il seguente metodo:

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

Questo metodo può essere un po 'di confusione. Esegue quanto segue: Quando l'utente tocca l'indice sul lato del tuo tableView (@" " … @"Z") un determinato carattere nell'array characters, la posizione di questo carattere nell'array (il suo indice) viene immessa in questo metodo. Puoi conservarlo in una proprietà. Se si restituisce 0 come nell'esempio, la sezione 0 della tabella verrà nuovamente visualizzata così com'è.
Se si esegue l'osservazione del valore chiave (KVO) della proprietà savedTappedIndex, verrà visualizzata una notifica quando la tabella viene nuovamente visualizzata. È quindi possibile leggere il carattere sfruttato da

NSString *tappedCharacter = characters[self.savedTappedIndex]; 

Con questo personaggio, si può mettere in dubbio il vostro server per i feed, che sono stati creati dagli utenti il ​​cui nome inizia con questo personaggio.
I dati possono quindi essere visualizzati nel numero tableView, sempre nella sezione 0.
Naturalmente, non è più necessario visualizzare l'indice sul lato dello tableView.

Ancora una volta, questo comportamento può essere molto confuso per l'utente, dal momento che è piuttosto inusuale.

Nota finale:

non si dovrebbe usare l'hack sopra per una reale attuazione, ma si potrebbe usare per testare l'interfaccia utente, e probabilmente vedrete che l'esperienza utente non è buona, dal momento che l'indice si comporta diversamente come al solito.

+0

Grazie Reinhard per la grande risposta! È fantastico che a volte possiamo pensare ed eseguire l'idea in modo diverso! Meglio! – user1314404