2016-11-03 11 views
1

私はIOSで新しく、UITableViewの検索バーを作成しています。私は配列を直接使用するとうまくいきますが、辞書がある配列を持っていれば動作しません。NSPredicateメソッドを使用してios内の辞書配列の検索バーメソッド

私は辞書の配列を持っている:

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    NSMutableDictionary *person1 = [NSMutableDictionary dictionaryWithDictionary:@{ 
          @"Name" : @"john", 
          @"Age" : @"10" 
          }]; 
    NSMutableDictionary *person2 = [NSMutableDictionary dictionaryWithDictionary:@{ 
         @"Name" : @"piter", 
         @"Age" : @"22" 
            }]; 
    NSMutableDictionary *person3 = [NSMutableDictionary dictionaryWithDictionary:@{ 
         @"Name" : @"rams", 
         @"Age" : @"23"                   
             }]; 

    self.person = [[NSMutableArray alloc]initWithObjects:person1,person2,person3 ,nil]; 
} 

私はUITableView上で、これらの辞書名を印刷しています。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    static NSString *simpleTableIdentifier = @"myCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
    } 
    cell.textLabel.text = [[self.personobjectAtIndex:indexPath.row]objectForKey:@"Name"]; 
    return cell; 
} 

UITableViewに名前のリストが表示されます。私は、検索バーを使用して、私は特定の単語を検索し、それらが私のUITableViewに表示したいが、そのは、このコードを使用して動作していない:

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

    if([searchText length] == 0){ 
     self.isfiltered = NO; 
    } 
    else{ 
     self.isfiltered = YES; 
     NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"SELF contains[cd] %@",searchText]; 
     filteredList = [self.person filteredArrayUsingPredicate:resultPredicate]; 
    } 

    [self.mytable reloadData]; 
} 

答えて

1

検索中にあなたのデータソース配列を変更する必要があります。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return self.isfiltered ? filteredList.count : self.person.count; 
} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"myCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; } 
cell.textLabel.text = [[ self.isfiltered ? filteredList : self.person objectAtIndex:indexPath.row]objectForKey:@"Name"]; } 

    return cell; 
} 
0

「SELF」 - >「名前」を変更する必要があります。

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 

     if([searchText length] == 0){ 
      self.isfiltered = NO; 
     } 
     else{ 
      self.isfiltered = YES; 
      NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"Name contains[cd] %@",searchText]; 
      filteredList = [self.person filteredArrayUsingPredicate:resultPredicate]; 
     } 

     [self.mytable reloadData]; 
    } 

その後、あなたのテーブルの列に変更します。

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    if (self.isfiltered) 
    return filteredList.count; 
    else 
    return self.person.count; 
} 


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *simpleTableIdentifier = @"myCell"; 

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 

if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; } 
if (self.isfiltered) 
cell.textLabel.text = [[self.isfiltered objectAtIndex:indexPath.row]objectForKey:@"Name"]; 

else 
cell.textLabel.text = [[self.person objectAtIndex:indexPath.row]objectForKey:@"Name"]; 


    return cell; 
} 
関連する問題