I am trying to create a UITableView
index for faster scrolling of a large UITableView
, I have the index showing up on the right but when I try to s
You can use this
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
Which tells the table which section corresponds to section title/index (e.g. "B",1))
This method is for returning a section corresponding to a Title. But you want to scroll your single section's row according to these titles. So follow these steps:
Create global array means declare it in .h file
NSMutableArray *alphabetsArray;
NSMutableArray *dataArray; //--This contain your cell value i.e. Honda,Mazda--//
Define it in viewDidLoad
method like below then return it from UITableView method..
alphabetsArray = [[NSMutableArray alloc] init];
[alphabetsArray addObject:@"A"];
[alphabetsArray addObject:@"B"];
[alphabetsArray addObject:@"C"];
[alphabetsArray addObject:@"D"];
[alphabetsArray addObject:@"E"];
[alphabetsArray addObject:@"F"];
[alphabetsArray addObject:@"G"];
[alphabetsArray addObject:@"H"];
[alphabetsArray addObject:@"I"];
[alphabetsArray addObject:@"J"];
[alphabetsArray addObject:@"K"];
[alphabetsArray addObject:@"L"];
[alphabetsArray addObject:@"M"];
[alphabetsArray addObject:@"N"];
[alphabetsArray addObject:@"O"];
[alphabetsArray addObject:@"P"];
[alphabetsArray addObject:@"Q"];
[alphabetsArray addObject:@"R"];
[alphabetsArray addObject:@"S"];
[alphabetsArray addObject:@"T"];
[alphabetsArray addObject:@"U"];
[alphabetsArray addObject:@"V"];
[alphabetsArray addObject:@"W"];
[alphabetsArray addObject:@"Y"];
[alphabetsArray addObject:@"X"];
[alphabetsArray addObject:@"Z"];
[Note: You can also create alphabetsArray with dynamic contains according to your dataArray. For this follow How we can create dynamic section index titles array at below]
Now use the above mentioned method to get the title
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return alphabetsArray;
}
Write your logic to scroll the UITableView
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
for (int i = 0; i< [dataArray count]; i++) {
// Here you return the name i.e. Honda,Mazda
// and match the title for first letter of name
// and move to that row corresponding to that indexpath as below
NSString *letterString = [[dataArray objectAtIndex:i] substringToIndex:1];
if ([letterString isEqualToString:title]) {
[tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES];
break;
}
}
return -1;
}
****How we can create dynamic section index titles array****
Let us suppose that dataArray is like that
[@"Honda",@"Maruti",@"Mazda",@"Toyota",.....]
Create a method for creating dynamic section index titles array as below
- (void)createAlphabetArray;
Implements createAlphabetArray
method as below
#pragma mark - Create Alphabet Array
- (void)createAlphabetArray {
NSMutableArray *tempFirstLetterArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [dataArray count]; i++) {
NSString *letterString = [[dataArray objectAtIndex:i] substringToIndex:1];
if (![tempFirstLetterArray containsObject:letterString]) {
[tempFirstLetterArray addObject:letterString];
}
}
alphabetsArray = tempFirstLetterArray;
[tempFirstLetterArray release];
}
Now just call it anywhere when you want to change alphabetsArray contains
[self createAlphabetArray];
Now you can create dynamic section index titles array dynamically according to your dataArray contents.