Je souhaite répliquer le comportement de la barre de défilement de Contacts.app.UITableView indexé, comme Contacts.app
Je sais que vous devez mettre en œuvre ces deux méthodes:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView;
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;
Et que ce que je l'ai fait: le premier renvoie un tableau de caractères A à Z, et le second renvoie l'index. Jusqu'à présent, ça marche plutôt bien: j'ai la barre de défilement, et le défilement fait défiler le fichier UITableView.
Mais j'ai deux questions:
En premier lieu, le problème est, si je n'ai pas de contacts pour la lettre C par exemple, le défilement sera évidemment décalés, et le défilement sur C affiche le D index, en faisant défiler sur D montrera l'index E ... Je pensais à la recherche de la section la plus proche, mais est-ce la façon la plus efficace de le faire? Quelque chose comme la mise en œuvre de cette fonction dans ma classe:
- (NSInteger) getSectionIndexForSectionTitle:(NSString *section) {
if ([_allSections objectForKey:section] == nil) {
NSComparisonResult res = NSOrderedAscending;
for (NSString* sectionTitle in _allSections) {
NSComparisonResult tmp = [sectionTitle compare:section];
if (tmp == NSOrderedDescending && res == NSOrderedAscending)
return [(NSNumber *)[_allSections objectForKey:sectionTitle] intValue];
res = tmp;
}
return [_allSections count] - 1;
}
return [(NSNumber *)[_allSections objectForKey:section] intValue];
}
Mais j'ai peur des mauvaises performances que ces solutions pourraient fournir.
Deuxième question, qui pourrait être liée au premier: Dans Contacts.app, vous ne pouvez pas voir la lettre "O" dans la barre de défilement, mais vous pouvez toujours faire défiler jusqu'à cette section. Une idée sur la façon d'y parvenir?
Merci de me lire et de m'aider!
Merci pour votre réponse. Cela semble plus efficace, évidemment. Mais je ne vois pas comment cela résout l'autre question (la lettre "O" n'étant pas présente dans la barre de défilement)? J'ai essayé d'ajouter une section avec une chaîne vide dans '- (NSArray *) sectionIndexTitlesForTableView: (UITableView *) tableView;', mais si je fais cela, je vais avoir un espace vide dans la barre de défilement, ce que je ne veux pas . – DCMaxxx