2013-02-21 38 views
0

我正在使用以下代碼使用uisearchbar,tableview和JSON Web服務進行搜索。目前的問題是,儘管應用程序正在搜索並在tableview中顯示數據,但是在搜索欄中每個文本都發生了變化之後,它正在搜索。我希望它只在用戶觸摸搜索按鈕後才能搜索。當它在uisearch文本字段中每次更改時都會查詢Web時,它似乎陷入困境。我該如何阻止無用信息的即時搜索?

這裏就是我要搜索:

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

    NSString *searchQuery = [NSString stringWithFormat:@"http://api.****/%@",searchText]; 

    NSString *jsonString = [NSString 
          stringWithContentsOfURL:[NSURL URLWithString:searchQuery] 
          encoding:NSStringEncodingConversionAllowLossy|NSUTF8StringEncoding 
          error:nil]; 

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

    SBJSON *parser = [[SBJSON alloc] init]; 
    NSDictionary *results = [parser objectWithString:jsonString error:nil]; 

    itemsTMP = [results objectForKey:@"results"]; 

    // [self setDisplayItems:[results objectForKey:@"results"]]; 

    [self setAllItems:[itemsTMP copy]]; 
    self.displayItems = [itemsTMP copy]; 

    int a = [displayItems count]; 
    NSString *countString = [NSString stringWithFormat:@"results %d",a]; 
    countLabel.text = countString; 

    [self.tableView reloadData]; 


} 

我在想也許代碼應該移到

-(void) searchBarSearchButtonClicked:(UISearchBar *)aSearchBar { 

    [self.searchBar resignFirstResponder]; 

    return; 
    // searchBar resigns after search clicked 

} 

,但不知道如何將:(NSString *)searchText添加到這個方法

感謝您的幫助

回答

1

只需將textDidChange代碼到searchBarSearchButtonClicked方法解決您的問題。

-(void) searchBarSearchButtonClicked:(UISearchBar *)aSearchBar { 

    [self.searchBar resignFirstResponder]; 

    NSString *searchQuery = [NSString stringWithFormat:@"http://api.****/%@",aSearchBar.text]; 

    NSString *jsonString = [NSString 
          stringWithContentsOfURL:[NSURL URLWithString:searchQuery] 
          encoding:NSStringEncodingConversionAllowLossy|NSUTF8StringEncoding 
          error:nil]; 

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

    SBJSON *parser = [[SBJSON alloc] init]; 
    NSDictionary *results = [parser objectWithString:jsonString error:nil]; 

    itemsTMP = [results objectForKey:@"results"]; 

    // [self setDisplayItems:[results objectForKey:@"results"]]; 

    [self setAllItems:[itemsTMP copy]]; 
    self.displayItems = [itemsTMP copy]; 

    int a = [displayItems count]; 
    NSString *countString = [NSString stringWithFormat:@"results %d",a]; 
    countLabel.text = countString; 

    [self.tableView reloadData]; 

    return; 
    // searchBar resigns after search clicked 

} 
+0

謝謝!那工作。我把NSString * searchQuery;在.h,然後保持searchQuery = [NSString stringWithFormat:@「http://api.****/%@」,searchText];在textDidChange方法和searchBarSearchButtonClicked中的其他所有內容 – hanumanDev 2013-02-21 12:02:27

+1

Plz chk我的更新答案,我追加搜索欄文本到searchQuery字符串。所以不需要在.h文件中聲明searchQuery字符串。如果你在.h文件中聲明它不會產生問題,但是如果你在本地需要它,那麼不需要這樣做。 – Girish 2013-02-21 12:07:13