2012-04-08 3 views
0

Ich habe eine Anwendung, die eine UITableView verwendet, die die Namen der Produkte enthält, diese Produkte sind auch in ihre jeweiligen Abschnitte basierend auf ihren ersten Buchstaben aufgeteilt.Hinzufügen einer Suchleiste zur iPhone-Anwendung, die alphabetische Abschnitte verwendet?

Hier ist mein Code:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

     //Initialize alphabet array 
     m_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",@"Other", nil]; 

     //Initialize alphabet distionary of arrays 
     m_AlphabetDictionary = [[NSMutableArray alloc]init]; 

     //Populate distionary with a mutable array for each character 
     //in the alphabet (plus one "Other" category) 
     for (int i = 0; i < 27; i++) 
      [m_AlphabetDictionary insertObject:[[NSMutableArray alloc] init] atIndex: i]; 

     // The number of products in the database 
     appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 

     NSMutableArray *tempArray = [[NSMutableArray alloc] init]; 

     //For each product in the appDelgates products 
     for (Product *product in appDelegate.m_Products){ 
      if ([product.category isEqualToString:productType]){ 

       [tempArray addObject:product]; 

       //firstLetter is equal to the first letter of the products name 
       NSString * l_FirstLetter = [product.name substringToIndex:1]; 
       //convert firstString to uppercase 
       l_FirstLetter = [l_FirstLetter uppercaseString]; 

       //The added flag ensures objects whose first letter isn't a letter 
       //are added to array 26 
       bool added = NO; 

       for(int i=0; i<[m_Alphabet count]; i++){ 
        //If the first letter of product name is equal to the letter at index i in theAlphabet 
        if ([l_FirstLetter isEqualToString:[m_Alphabet objectAtIndex:i]]) { 
         //Add product to section array for that letter 
         [[m_AlphabetDictionary objectAtIndex:i] addObject:product]; 

         added = YES; 
        } 

       } 
       //If product hasn't been added to array, add it to "Others" category 
       if(!added) 
        [[m_AlphabetDictionary objectAtIndex:26] addObject:product]; 

      } 
     } 

    //Set navigation controller title 
    self.title = productType; 

} 

//Number of sections is equal to the length of the m_Alphabet array 
//Letters A-Z plus "Other" 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
     return [m_Alphabet count]; 
} 

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

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

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

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

    return [m_Alphabet objectAtIndex:section]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSLog(@"Cell for row"); 
     static NSString *CellIdentifier = @"Cell"; 

     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
     if (cell == nil) { 
      cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
     } 

    if([self.productType isEqualToString:@"All"]){ 
     Product *product = (Product *) [appDelegate.m_Products objectAtIndex:indexPath.row]; 

     cell.textLabel.text = product.name; 

     // Configure the cell. 
     return cell; 
    } 
    else { 

      //Instead of using appDelegate.products use the new array that will be filled 
      //by the numberOfReowsInSection method 
      Product *product = (Product *)[[m_AlphabetDictionary objectAtIndex:indexPath.section] objectAtIndex:indexPath.row]; 

      cell.textLabel.text = product.name; 
      // Configure the cell. 
      return cell; 
    } 
} 

Was ich suche, ist zu tun, um eine Suchleiste oben auf meiner Tabellenansicht hinzufügen, die genau wie die Suchleiste in der „Alle Kontakte“ Abschnitt verhält sich in die iPhone-Kontakte-Anwendung. I.E. Wenn ich suche, verschwinden alle Abschnitte und nur die Suchergebnisse werden angezeigt, bis die Suchleiste wieder leer ist.

Kann mir jemand in die richtige Richtung zeigen?

Danke,

Jack

Antwort

3

Sieht aus wie Sie verwendet UISearchDisplayController müssen, was am wahrscheinlichsten, welche Anwendung verwendet die Kontakte ist (zusammen mit Mail, Karten, Safari und Musik). Es stellt sich als ein Tabellenansichts-Overlay dar, das möglicherweise eine Bereichsleiste (Ihre Auswahl) enthält oder nicht und filtert die Ergebnisse basierend auf dem Text der Suchleiste. Ein einfaches Tutorial mit Interface-Builder kann here gefunden werden, und ein Apple-Beispiel sans-IB kann here gefunden werden.

Verwandte Themen