Se me ocurrió un enfoque alternativo para manejar una lista alfabética de una sola letra sin usar secciones. Es similar a la respuesta de Zaph, pero en lugar de obtener cualquier valor al devolver un nuevo índice (ya que siempre tendremos 1 sección), calculamos el índice para la ubicación del primer elemento en la matriz que comienza con un cierto carácter, luego nos desplazamos lo.
La desventaja es que esto requiere buscar la matriz cada vez (¿es esto absolutamente terrible?), Sin embargo, no noté ningún retraso o comportamiento lento en el simulador de iOS o en mi iPhone 4S.
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return[NSArray arrayWithObjects:@"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", nil];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
NSInteger newRow = [self indexForFirstChar:title inArray:self.yourStringArray];
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:newRow inSection:0];
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
return index;
}
- (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array
{
NSUInteger count = 0;
for (NSString *str in array) {
if ([str hasPrefix:character]) {
return count;
}
count++;
}
return 0;
}
agregando propiedad para almacenar el último índice seleccionado como
@property (assign, nonatomic) NSInteger previousSearchIndex;
y almacenar esta propiedad cada vez como:
- (NSInteger)indexForFirstChar:(NSString *)character inArray:(NSArray *)array
{
NSUInteger count = 0;
for (NSString *str in array) {
if ([str hasPrefix:character]) {
self.previousSearchIndex = count;
return count;
}
count++;
}
return self.previousSearchIndex;
}
y actualizando scrollToRow
código como:
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Haz este método aún mejor y con buena animación.