मैं अनुभागों का उपयोग किए बिना एकल अक्षर वर्णमाला सूची को संभालने के लिए एक वैकल्पिक दृष्टिकोण के साथ आया था। यह ज़ैफ़ के उत्तर के समान है, लेकिन एक नया सूचकांक वापस करने से कोई मूल्य प्राप्त करने के बजाय (क्योंकि हमारे पास हमेशा 1 खंड होगा), हम उस सरणी में पहले आइटम के स्थान के लिए सूचकांक की गणना करते हैं जो एक निश्चित चरित्र से शुरू होता है, फिर स्क्रॉल करें यह करने के लिए।
नकारात्मक पक्ष यह है कि हर बार सरणी की खोज करना आवश्यक है (क्या यह बिल्कुल भयानक है?), हालांकि मैंने आईओएस सिम्युलेटर या अपने आईफोन 4 एस पर किसी भी अंतराल या धीमे व्यवहार को नोटिस नहीं किया।
- (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;
}
अंतिम चयनित इंडेक्स जैसे स्टोर करने के लिए संपत्ति जोड़ना
@property (assign, nonatomic) NSInteger previousSearchIndex;
और हर बार की तरह इस संपत्ति का भंडारण:
- (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;
}
और अद्यतन scrollToRow
कोड की तरह:
[tableView scrollToRowAtIndexPath:newIndexPath atScrollPosition:UITableViewScrollPositionTop animated:YES];
इस विधि को और भी अच्छे और अच्छे एनीमेशन के साथ करें।