2014-01-30 74 views
2

我已經完全工作UISearchDisplayController暗示我的UITableViewParse.com作出。無論如何,當我開始尋找時,我總是隻能得到那封信的結果。我想顯示每個數據包含該字母。UISearchDisplayController顯示結果解析

例如:我把到我的搜索和搜索它只是我:阿曼和監察員。我在我的UITableView中也有一個名爲社區的單元。你看到這個詞也包含om但我的搜索不顯示任何東西。它只顯示盯着這些字母的單詞。

有人可以幫助我嗎?謝謝。

@implementation TableViewController3 
@synthesize MainTable; 
@synthesize searchBar; 
@synthesize searchController; 
@synthesize searchResults; 


- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"showDetaill"]) { 
     { 
      DetailViewController3 *sdvc = (DetailViewController3 *)[segue destinationViewController]; 


      if(self.searchDisplayController.active) { 
       NSIndexPath *indexPath = [[self tableView] indexPathForSelectedRow]; 
       PFObject *object = [self.objects objectAtIndex:indexPath.row]; 

       object = (PFObject *)[[self searchResults]objectAtIndex:[[[[self searchDisplayController]searchResultsTableView]indexPathForSelectedRow]row]]; 
       sdvc.objc = object; 

      } else { 

       NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow]; 
       PFObject *object = [self.objects objectAtIndex:indexPath.row]; 
       DetailViewController3 *detailViewController = [segue destinationViewController]; 
       detailViewController.objc = object; 


      } 

     } 
    } 
} 



- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)]; 

    self.tableView.tableHeaderView = self.searchBar; 

    self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self]; 

    self.searchController.searchResultsDataSource = self; 
    self.searchController.searchResultsDelegate = self; 
    self.searchController.delegate = self; 



    self.searchResults = [NSMutableArray array]; 

    self.tableView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]; 
    [self.navigationController.navigationBar setBarTintColor:[UIColor lightGrayColor]]; 


-(void)filterResults:(NSString *)searchTerm { 


     PFQuery *query = [PFQuery queryWithClassName: @"Countries"]; 
     [query whereKey:@"CountryTitle" hasPrefix:searchTerm]; 
     query.limit = 50; 

     [query findObjectsInBackgroundWithTarget:self selector:@selector(callbackWithResult:error:)]; 
    } 




- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString { 
    [self filterResults:searchString]; 
    return YES; 
} 

- (void)callbackWithResult:(NSArray *)celebrities error:(NSError *)error 
{ 
    if(!error) { 
     [self.searchResults removeAllObjects]; 
     [self.searchResults addObjectsFromArray:celebrities]; 
     [self.searchDisplayController.searchResultsTableView reloadData]; 
    } 
} 

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

    if (tableView == self.tableView) { 


     return self.objects.count; 

    } else { 

     return self.searchResults.count; 

    } 
} 




- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView 
{ 
    tableView.rowHeight = 70.0f; 
} 



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath object:(PFObject *)object { 

    NSString *uniqueIdentifier = @"MainCell"; 
    CustomCell3 *cell = nil; 
    cell = (CustomCell3 *) [self.tableView dequeueReusableCellWithIdentifier:uniqueIdentifier]; 




    if (!cell) { 
     NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:nil options:nil]; 

     for (id currentObject in topLevelObjects) 
     { 
      if([currentObject isKindOfClass:[CustomCell3 class]]) 
      { 
       cell = (CustomCell3 *)currentObject; 
       break; 
      } 
     } 
    } 

    if (tableView == self.tableView) { 
     cell.MainTitle.text = [object objectForKey:@"CountryTitle"]; 
     cell.DescriptTitle.text = [object objectForKey:@"DescriptTitle"]; 
     [cell.FlagTitle setImageWithURL:[NSURL URLWithString:[object objectForKey:@"ImaURL"]] 
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 
     cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
     cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
    } 






if(tableView == self.searchDisplayController.searchResultsTableView) { 

     PFObject *searchedUser = [self.searchResults objectAtIndex:indexPath.row]; 
     NSString *content = [searchedUser objectForKey:@"CountryTitle"]; 
     NSString *desco = [searchedUser objectForKey:@"DescriptTitle"]; 
     cell.DescriptTitle.text = desco; 
     cell.MainTitle.text = content; 
     NSString *image = [searchedUser objectForKey:@"ImaURL"]; 

    [cell.FlagTitle setImageWithURL:[NSURL URLWithString:image] 
        placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 
    cell.backgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 
    cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[ [UIImage imageNamed:@"background.png"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0] ]; 



} 

return cell; 
} 





@end 

回答

3

使用- (void)whereKey:(NSString *)key containsString:(NSString *)substring,而不是- (void)whereKey:(NSString *)key hasPrefix:(NSString *)prefix

-(void)filterResults:(NSString *)searchTerm { 


    PFQuery *query = [PFQuery queryWithClassName: @"Countries"]; 
    [query whereKey:@"CountryTitle" containsString:searchTerm]; 
    query.limit = 50; 

    [query findObjectsInBackgroundWithTarget:self selector:@selector(callbackWithResult:error:)]; 
} 

如果使用hasPrefix:那麼搜索結果就會開始搜索字符串的元素。

+0

謝謝,它的工作原理。我想再問一次關於搜索的事情,當我進入搜索並開始輸入時,它會區分大寫字母和小寫字母。所以,如果我在開始時鍵入小寫字母,它不會顯示任何東西。你有什麼想法如何解決? – Milan1111

+0

這個[link](https://www.parse.com/questions/case-insensitive-pfquery)可能會幫助你解決這個問題。 – Akhilrajtr

+0

是的,我明白了!謝謝你,兄弟 – Milan1111