2012-04-08 14 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連絡先アプリケーション。 I.私が検索すると、すべてのセクションが消え、検索バーが再び空白になるまで検索結果だけが表示されます。

誰でも正しい方向に向けることができますか?あなたがする必要があるよう

おかげで、

ジャック

答えて

3

は、最も可能性が高い、UISearchDisplayControllerを使用して見えるもの(メール、マップ、サファリ、音楽と一緒に)連絡先アプリケーションが使用します。これは、スコープバー(選択肢)を含む場合と含まない場合があるテーブルビューオーバーレイとして表示され、検索バーのテキストに基づいて結果がフィルタリングされます。インタフェースビルダーに関する簡単なチュートリアルはhere、りんごの例sans-IBはhereです。

関連する問題