我正在尝试创建一个UITableView
索引,以便更快地滚动一个大的UITableView
,我的索引显示在右边,但是当我尝试使用它滚动时,它不起作用。
我想知道我是否遗漏了一些东西,所以我想知道是否还有别的东西需要做,或者其他的事情。
#pragma - TableView Index Scrolling
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
if(searching)
return nil;
NSMutableArray *tempArray = [[NSMutableArray alloc] init];
[tempArray addObject:@"A"];
[tempArray addObject:@"B"];
[tempArray addObject:@"C"];
[tempArray addObject:@"D"];
[tempArray addObject:@"E"];
[tempArray addObject:@"F"];
[tempArray addObject:@"G"];
[tempArray addObject:@"H"];
[tempArray addObject:@"I"];
[tempArray addObject:@"J"];
[tempArray addObject:@"K"];
[tempArray addObject:@"L"];
[tempArray addObject:@"M"];
[tempArray addObject:@"N"];
[tempArray addObject:@"O"];
[tempArray addObject:@"P"];
[tempArray addObject:@"Q"];
[tempArray addObject:@"R"];
[tempArray addObject:@"S"];
[tempArray addObject:@"T"];
[tempArray addObject:@"U"];
[tempArray addObject:@"V"];
[tempArray addObject:@"W"];
[tempArray addObject:@"Y"];
[tempArray addObject:@"X"];
[tempArray addObject:@"Z"];
return tempArray;
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
if(searching)
return -1;
return index % 2;
}
答案 0 :(得分:43)
您可以使用此
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
告诉表格哪个部分对应于章节标题/索引(例如“B”,1))
此方法用于返回与标题对应的部分。但是您想根据这些标题滚动单个部分的行。 请按照以下步骤操作:
创建全局数组意味着在.h文件中声明它
NSMutableArray *alphabetsArray;
NSMutableArray *dataArray; //--This contain your cell value i.e. Honda,Mazda--//
在viewDidLoad
方法中定义,然后从UITableView方法返回..
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"];
[注意:您还可以使用动态创建 alphabetsArray 包含根据您的 dataArray 。为此,请按照我们如何做到 在下面创建动态部分索引标题数组
现在使用上述方法获取标题
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
return alphabetsArray;
}
编写逻辑以滚动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;
}
****我们如何创建动态部分索引标题数组****
让我们假设dataArray就是那样
[@"Honda",@"Maruti",@"Mazda",@"Toyota",.....]
创建一个创建动态部分索引标题数组的方法,如下所示
- (void)createAlphabetArray;
实施createAlphabetArray
方法,如下所示
#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];
}
现在只要在想要更改alphabetsArray包含
的任何地方调用它[self createAlphabetArray];
现在,您可以根据dataArray内容动态创建动态节索引标题数组。
答案 1 :(得分:10)
表格视图需要按字母顺序分组我相信 - 临时数组不知道如何将您选择的字母翻译成特定索引(它不知道“a”,“b”或“ c“意思是”。
如果您查看ipod歌曲列表,您会注意到每个字母组都有一个字母部分分隔符。您需要将表对象分组为以字母标题的部分,以便将字母“A”转换为索引。 apple的ipod列表实际上是在滚动到第一个“A”条目,而不是“A”部分的开头。
答案 2 :(得分:2)
您可以尝试:
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index {
return index;
}
没有控制器的其余部分很难说出错了,但我认为这应该有用。