UITableViewのインデックス

2010/06/12

UITableViewのセクションを、アルファベットでカテゴリーして表示。 iPhone

データは、アルファベットをキーとしたNSArray keys、アイテムをNSDictionary namesとした。
UITableViewのtitleForHeaderInSectionを実装

サンプル

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return [keys count];
}
- (NSInteger)tableView:(UITableView *)tableView 
    numberOfRowsInSection:(NSInteger)section {
    
    if ([keys count] == 0) {
        return 0;
    }
    NSString *key = [keys objectAtIndex:section];
    NSArray *nameSection = [names objectForKey:key];
    return [nameSection count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    
    NSUInteger section = [indexPath section];
    NSString *key = [keys objectAtIndex:section];
    NSArray *nameSection = [names objectForKey:key];
    
    static NSString *identifier = @"CustomCellIdentifier";

/*
    CustomCell *cell = (CustomCell *)[tableView 
                dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" 
                                                     owner:self options:nil];
        for (id obj in nib) {
            if ([obj isKindOfClass:[CustomCell class]]) {
                cell = (CustomCell *)obj;
            }
        }
    }
*/
//2012/08/30修正 Xcode4で UITableViewCell をUITableViewで内で作成する場合は、こっちの方がオススメ
        CustomCell *cell = (CustomCell *)[tableView dequeueReusableCellWithIdentifier:identifier];
    NSUInteger row = [indexPath row];
    cell.nameLabel.text = [nameSection objectAtIndex:row];
    
    return cell;
}

セクション毎にアルファベットを表示

-(NSString *)tableView:(UITableView *)tableView
    titleForHeaderInSection:(NSInteger)section {
    NSString *key = [keys objectAtIndex:section];
    return key;
}

検索インデックスをつける

-(NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView {
    return keys;
}

日本語対応

Table View のインデックスと日本語対応 ローカライズファイルを使ってます。