Wenn Sie in der iPhone-Musik-App Künstler, Songs oder Alben auswählen, wird auf der rechten Seite der Benutzeroberfläche eine Tabellenansicht mit einer vertikalen Liste einzelner Buchstaben angezeigt, die ein schnelles Scrollen ermöglicht. Wie aktiviere ich diese Funktionalität in meiner App?
Prost, Doug
ios
iphone
objective-c
uitableview
Dugla
quelle
quelle
Sie müssen auch die Abschnitte für jede Sprache lokalisieren. Nachdem ich ein bisschen herumgegraben hatte, fand ich
UILocalizedIndexedCollation
es ziemlich nützlich:https://developer.apple.com/documentation/uikit/uilocalizedindexedcollation
quelle
Ich habe mir einen alternativen Ansatz für die Behandlung einer Alphabetliste mit einem Buchstaben ohne Verwendung von Abschnitten ausgedacht. Es ähnelt der Antwort von Zaph, aber anstatt einen Wert aus der Rückgabe eines neuen Index zu erhalten (da wir immer einen Abschnitt haben), berechnen wir den Index für die Position des ersten Elements im Array, das mit einem bestimmten Zeichen beginnt, und scrollen dann dazu.
Der Nachteil ist, dass das Array jedes Mal durchsucht werden muss (ist das absolut schrecklich?), Allerdings habe ich im iOS-Simulator oder auf meinem iPhone 4S keine Verzögerung oder langsames Verhalten festgestellt.
Hinzufügen einer Eigenschaft zum Speichern des zuletzt ausgewählten Index wie
und Speichern dieser Eigenschaft jedes Mal wie:
und Aktualisieren von
scrollToRow
Code wie:Mach diese Methode noch besser und mit netter Animation.
quelle
Eine Gruppe von Leuten fragte, ob dies ohne Abschnitte möglich sei. Ich wollte dasselbe und fand eine Lösung, die möglicherweise etwas zwielichtig ist und keinen Wert an sectionForSectionIndexTitle zurückgibt, aber wenn Sie sich in einer Ecke befinden und nicht für jeden Buchstaben des Alphabets einen Abschnitt erstellen müssen ist eine sichere Lösung. Entschuldigung für jeden Code Nazis im Voraus. : P.
Es funktioniert hervorragend, wenn Sie eine große Datenmenge erhalten und das Aufteilen eine Menge Arbeit erfordern würde. :) Ich habe versucht, generische Variablen zu verwenden, damit du weißt, was ich tue. d_itemsInTable ist ein NSArray von NSDictionaries, das ich in der UITableView aufführe.
quelle
Hier ist eine modifizierte Version von Kyles Funktion, die den Fall des Klickens auf einen Index behandelt, für den Sie keine Zeichenfolge haben:
quelle
Wenn Sie a verwenden
NSFetchedResultsController
, können Sie einfach Folgendes tun:quelle
Implementieren Sie die Delegatmethoden
-sectionIndexTitlesForTableView:
und-tableView:sectionForSectionIndexTitle:atIndex:
UITableViewDataSource
Weitere Informationen finden Sie in der Dokumentation.quelle
Hier ist eine einfache Lösung in Swift, vorausgesetzt, Sie haben Ihre Titelüberschriften in einem Array. Wenn der Titel nicht gefunden wurde, wird der vorherige Index im Array zurückgegeben.
quelle
return self.headerTitles.count - self.headerTitles.filter{$0 > title}.count
, dass der Index des ersten und nicht der letzte übereinstimmende Abschnitt für den angegebenen Indextitel zurückgegeben wird.Wenn Sie MonoTouch verwenden, überschreiben Sie die SectionIndexTitles-Methode (UITableView) in der UITableViewDataSource-Klasse. Geben Sie einfach ein Array von Zeichenfolgen zurück, und die Unterklasse kümmert sich um den Rest.
* Nur ein Hinweis für diejenigen von uns, die C # und Mono (.NET) zum Schreiben von iPhone-Apps verwenden. :) :)
quelle