2010-11-15 40 views
3

我有許多部分的表視圖,這些部分的標題只是A-Z和#就像在iPhone地址簿應用程序。我已經實現了sectionIndexTitlesForTableView來快速移動到特定的字母,基本上只是返回一個字母A - Z和#的數組。sectionIndexTitlesForTableView正確排列與部分

這將工作,如果我的列表總是包含一個項目的每個字母的字母,但它不會和這擰了部分索引標題,因爲按列表中的C可能會去D如果第三部分是D即如果C節中沒有任何內容)。

我知道我可以返回sectionIndexTitlesForTableView中的數組只有字母是部分,但這看起來有點奇怪,而不是iPhone地址簿應用程序相同的功能。

我該如何解決這個問題?

回答

3

基本上,你必須實現:

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

,並返回基於指數和標題哪個部門應當對。其中部分是存儲部分列表的數組

6

如果您只有A-Z的區段A,C,F,S,T和區段索引標題,我不會看到@ Rudiger的方法是如何工作的。使用MPMediaQuery時可能會出現這種情況。

爲了解決這個問題,我已經實現了這個方法如下,tableview將滾動到正確的部分或下一個,如果你正在尋找的不存在。

- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index 
{ 
    NSString *sectionTitle = nil; 
    NSComparisonResult result; 
    int i; 

    for(i = 0; i < tableView.numberOfSections; i++) 
    { 
     sectionTitle = [self tableView:tableView titleForHeaderInSection:i]; 
     result = [title compare:sectionTitle]; 

     if(result != NSOrderedDescending) 
      break; 
    } 

    return (MIN (i, (tableView.numberOfSections - 1))); 
} 

UPDATE

改變返回值來修復由埃裏克·杜澤所描述的情況。

+2

除非用戶觸及超出最後一個部分標題的索引(例如,如果用戶觸及索引Z,而最後一個部分索引是Y),否則這很有效。我只是修改了return:「return(MIN(i,(tableView.numberOfSections - 1)));」 – 2012-07-15 15:30:05

+0

適合我!如果你在A-Z數組索引中有#應該是第一個,在A之前,而不是最後,在Z之後。 – 2013-05-09 15:26:41

+0

這太棒了。我有5k +記錄在uitableview上,效果很好。謝謝! – 2014-03-11 07:54:43