Tôi đã nghĩ ra một cách tiếp cận thay thế để xử lý một danh sách bảng chữ cái đơn lẻ mà không sử dụng các phần. Nó tương tự như câu trả lời của Zaph nhưng thay vì nhận bất kỳ giá trị nào từ việc trả về một chỉ mục mới (vì chúng tôi sẽ luôn có 1 phần), chúng tôi tính toán chỉ số cho vị trí của mục đầu tiên trong mảng bắt đầu bằng một ký tự nhất định, sau đó cuộn với nó.
Nhược điểm là điều này đòi hỏi phải tìm kiếm mảng mỗi lần (điều này có thực sự khủng khiếp không?), Tuy nhiên tôi không nhận thấy bất kỳ hành vi chậm hoặc chậm nào trong trình mô phỏng iOS hoặc trên iPhone 4S của mình.
- (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;
}
thêm thuộc tính để lưu trữ chỉ mục được chọn cuối cùng như
@property (assign, nonatomic) NSInteger previousSearchIndex;
và lưu trữ thuộc tính này mọi lúc như:
- (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;
}
và cập nhật scrollToRow
mã như:
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
Làm phương pháp này thậm chí còn tốt hơn và với hoạt ảnh đẹp.