2009-06-15 6 views
0

J'ai un UITableView, et j'ai différentes sections - les mots qui commencent par la lettre "A" vont à la section "A". Les mots commençant par la lettre "B" vont à la section "B" et ainsi de suite.Comment faire des en-têtes de section dans plusieurs langues

Voici mon code:

-(void) populateTable { 
    if (tableDataArray) 
    { 
     [tableDataArray removeAllObjects]; 
    } 

    for (int i = 0; i <= 27; i++) 
    { 
     NSMutableArray *words_in_section = [ [NSMutableArray alloc] init]; 
     [tableDataArray addObject: words_in_section]; 
     [words_in_section release]; 
    } 

    int cur_section; 
    int cur_word_id; 

    //First section, without title 
    while ((cur_word_id = [ [WordsDatabase sharedWordsDatabase] getNextWordToEditIDABC]) != -1) 
    { 
     NSMutableArray *temp_array = [tableDataArray objectAtIndex: 0]; 
     [temp_array addObject: [NSNumber numberWithInt: cur_word_id] ]; 
     [tableDataArray replaceObjectAtIndex: 0 withObject:temp_array]; 
    } 

    //All other sections 
    while ((cur_word_id = [ [WordsDatabase sharedWordsDatabase] getNextWordIDABC]) != -1) 
    { 
     cur_section = toupper([ [ [WordsDatabase sharedWordsDatabase] getWordAtID:cur_word_id] characterAtIndex:0 ]) - 'A'; 
     if (cur_section < 0) cur_section = 27; 
     else if (cur_section > 27) cur_section = 27; 
     else cur_section++; 

     NSMutableArray *temp_array = [tableDataArray objectAtIndex:cur_section]; 
     [temp_array addObject: [NSNumber numberWithInt: cur_word_id] ]; 
     [tableDataArray replaceObjectAtIndex:cur_section withObject:temp_array]; 
    } 

    [mainTableView reloadData]; 
} 

Je veux obtenir quelque chose de similaire à la liste de musique iPod - il y a des chansons qui sont classées par ordre alphabétique et la partie la plus intéressante est que la liste prend en charge à part toutes les autres langues de Anglais.

Comment puis-je y parvenir? Mon code ne fonctionne qu'avec des lettres anglaises et toutes les autres lettres sont attribuées à une dernière section.

Voici comment je définir les vues d'en-tête:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section 
{ 
    if ([ [tableDataArray objectAtIndex: section] count] == 0) return nil; 

    UITableViewCell *header_view = [ [ [UIView alloc] initWithFrame: CGRectMake(0, 0, 300, 20)] autorelease]; 

    header_view.backgroundColor = [UIColor orangeColor]; 

    UILabel *captionLabel = [ [ [UILabel alloc] initWithFrame: CGRectMake(10, 0, 290, 20)] autorelease]; 
    captionLabel.backgroundColor = [UIColor orangeColor]; 

    [header_view addSubview: captionLabel]; 

    if (section == 0) 
    { 
     return nil; 
    } else if (section >= 27) 
    { 
     captionLabel.text = @"#"; 
     return header_view; 
    } else 
    { 
     captionLabel.text = [NSString stringWithFormat: @"%c", section + 'A' - 1]; 
     return header_view; 
    } 

    return nil; 
} 

Comment puis-je ajouter à mon soutien de code des langues différentes?

Merci d'avance.

Répondre

0

Différentes langues auraient différentes conventions de catégorisation des mots. Par exemple, en japonais, vous voudrez probablement soit 10 sections (pour chaque ligne de la table katakana) soit 50 ou plus pour représenter chaque initiale de katakana. J'imagine que vous auriez à cas particulier les règles pour chaque langue.