2012-04-08 2 views
0

У меня есть приложение, которое использует UITableView, который содержит названия продуктов, эти продукты также разделяются на соответствующие разделы на основе их первой буквы.Добавление панели поиска в приложение iPhone, использующее алфавитные разделы?

Вот мой код:

- (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; 
    } 
} 

Что я ищу сделать это добавить строку поиска в верхней части моей точки зрения таблицы, которая ведет себя так же, как строку поиска в разделе «Все контакты» приложение «Контакты iPhone». И.Е. Когда я выполняю поиск, все разделы исчезают, и только результаты поиска отображаются до тех пор, пока строка поиска не будет пуста.

Может ли кто-нибудь указать мне правильное направление?

Спасибо,

Джек

ответ

3

Похоже, что вам нужно использует UISearchDisplayController, который, скорее всего, то, что использование контактов приложения (вместе с почтой, картами, сафари, и музыка). Он представляет собой оверлей табличного представления, который может содержать или не содержать панель видимости (ваш выбор) и фильтрует результаты на основе текста строки поиска. Простой учебник с использованием построителя интерфейса можно найти here, а пример яблока sans-IB можно найти here.

Смежные вопросы