Bölümleri kullanmadan tek harfli bir alfabe listesini ele almak için alternatif bir yaklaşım buldum. Zaph'ın cevabına benzer, ancak yeni bir dizin döndürmekten herhangi bir değer elde etmek yerine (her zaman 1 bölümümüz olacağından), dizideki ilk öğenin belirli bir karakterle başlayan konumu için dizini hesaplıyoruz, sonra kaydırıyoruz ona.
Bunun dezavantajı, her seferinde diziyi aramayı gerektiriyor (bu kesinlikle korkunç mu?), Ancak iOS simülatöründe veya iPhone 4S'imde herhangi bir gecikme veya yavaş davranış fark etmedim.
- (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;
}
gibi son seçilen dizini depolamak için özellik eklemek
@property (assign, nonatomic) NSInteger previousSearchIndex;
ve bu özelliği her zaman şu şekilde depolamak:
- (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;
}
ve aşağıdaki scrollToRow
gibi kod güncelleme :
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Bu yöntemi daha iyi ve güzel bir animasyonla yapın.