2010-11-26 2 views
4

Voici l'amélioration que je voudrais ajouter à mon UITableView avec l'alphabet:UITableView - Alphabet

S'il n'y a pas de résultats dans ma table qui ne commencent pas par l'une des lettres de l'alphabet, je n » Je veux voir ce titleForHeaderInSection dans mon UITableView.

Et je ne trouve pas le moyen de le faire.

Vous pouvez voir mon implémentation actuelle et une image comme exemple (http://blog.joefusco.name/wp-content/uploads/2010/10/indexed-table.jpg):

facilitiesViewController.h:

@interface FacilitiesViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource, ...> { 
      IBOutlet UITableView  *facilitiesTableView; 
      NSMutableArray   *facilitiesDictionary; 
      NSArray     *alphabet; 
      ... 
} 
@property (nonatomic, retain)  NSMutableArray  *facilitiesDictionary; 
@property (nonatomic, retain)  NSArray   *alphabet; 
... 

@end 

facilitiesViewController.m:

@implementation FacilitiesViewController 
... 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    alphabet = [[NSArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K", 
        @"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil]; 

    facilitiesDictionary = [[NSMutableArray alloc]init]; 

    for (int i = 0; i < [alphabet count]; i++) 
      [facilitiesDictionary insertObject:[[NSMutableArray alloc] init] atIndex: i]; 
    ... } 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
     return [alphabet count]; } 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return [[facilitiesDictionary objectAtIndex:section] count]; } 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
     ...  
     return cell; } 

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

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

- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section { 
    return [alphabet objectAtIndex:section]; } 

@end 

Répondre

1

Merci beaucoup Evan, j'ai pensé que faire cela serait très compliqué, mais ce n'était pas le cas! J'ai pris votre code et adapté à la mienne:

- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section { 

    if ([[facilitiesDictionary objectAtIndex:section] count]==0) 
     return nil; 

    return [alphabet objectAtIndex:section]; 
} 
+0

Ceci devrait être choisi comme réponse appropriée. Celui fourni par Evan fait en réalité tomber l'application. Vous devez regarder votre tableau d'objets pour déterminer s'il n'y a rien pour cette section. – roocell

+3

@roocell: Juste parce que le code que j'ai fourni bloque quand vous le copiez et le collez dans votre projet ne constitue pas un downvote. J'ai simplement donné un code pertinent pour aider le PO. Les questions devraient rarement nécessiter une réponse avec un code complet - des extraits et des échantillons sont généralement utilisés. Si le PO, ou même vous, a constaté que le code s'est cassé en raison d'un problème d'indexation de tableau, un commentaire devrait être laissé sur ma réponse, auquel j'aurais répondu rapidement. –

+0

comme une blonde .... –

3
- (NSString *)tableView:(UITableView *)aTableView titleForHeaderInSection:(NSInteger)section 
{ 
    if ([aTableView numberOfRowsInSection:section] == 0) return nil; 

    return [alphabet objectAtIndex:section]; 
} 

UITableView Class Reference