通过索引使UITableView可滚动

我想创build一个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; } 

表视图需要按字母顺序分组我相信 – 临时数组不知道如何将您select的字母翻译成特定索引(它不知道“a”,“b”或“c”是什么意思)。

如果你看一下ipod歌曲列表,你会注意到每个字母组都有一个字母分隔符。 您需要将表格对象分成标题为字母的部分,以便将字母“A”转换为索引。 什么苹果的ipod列表实际上是不滚动到第一个“A”条目,而是“A”部分的开始。

你可以使用这个

 - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 

其中告诉表的哪一部分对应于部分标题/索引(例如“B”,1))

此方法用于返回对应于标题的部分。 但是你想根据这些标题滚动你的单个部分的行。 所以按照下面的步骤

  1. 创build全局数组意味着在.h文件中声明它

     NSMutableArray *alphabetsArray; NSMutableArray *dataArray; //--This contain your cell value ie Honda,Mazda--// 
  2. 在下面的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"]; 

    [ 注意:你也可以根据你的dataArray的dynamic包含创buildalphabetsArray 。 关于这个如何在下面创builddynamic部分索引标题数组 ]

  3. 现在使用上面提到的方法来获得标题

     - (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView { return alphabetsArray; } 
  4. 编写你的逻辑来滚动UITableView

     - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { for (int i = 0; i< [dataArray count]; i++) { // Here you return the name ie 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; } 

****我们如何创builddynamic的段索引标题数组****

  1. 让我们假设dataArray是这样的

     [@"Honda",@"Maruti",@"Mazda",@"Toyota",.....] 
  2. 创build一个创builddynamic部分索引标题数组的方法如下

     - (void)createAlphabetArray; 
  3. 实现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]; } 
  4. 现在只要在你想改变alphabetsArray包含的地方调用它

     [self createAlphabetArray]; 

现在您可以根据您的dataArray内容dynamic创builddynamic部分索引标题数组。

你可以尝试:

 - (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index { return index; } 

没有控制器的其余部分,很难说出什么问题,但我认为这应该起作用。