2010-04-26 36 views
9

UISearchDisplayController rất tiện dụng và việc thực hiện tìm kiếm khá đơn giản.UISearchDisplayController - cách hiển thị kết quả tìm kiếm chỉ bằng nút phạm vi được chọn nhưng chuỗi tìm kiếm trống

Tuy nhiên, tôi gặp sự cố khi, trong ứng dụng của mình, tôi muốn hiển thị kết quả tìm kiếm với chuỗi tìm kiếm trống nhưng nút phạm vi được chọn.

Có vẻ như phải nhập một số chuỗi tìm kiếm để có được bảng kết quả tìm kiếm được khởi tạo và hiển thị.

Có cách nào để hiển thị kết quả tìm kiếm ngay sau khi người dùng đã chọn phạm vi nhưng chưa nhập từ tìm kiếm chưa?

Cảm ơn Bill

+0

Tôi có cùng một câu hỏi. Có ai có câu trả lời cho điều này không? –

Trả lời

2

khi bạn chạm vào một nút phạm vi mới cháy selectedScopeButtonIndex:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption; 

bạn có thể nắm bắt được lửa tiêu đề ra tìm kiếm của bạn ở đây sử dụng:

[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption] 

Won' t làm việc trên chỉ mục phạm vi ban đầu, nhưng bạn có thể chỉ cần tắt tìm kiếm của bạn ban đầu dựa trên lựa chọn cuối cùng được chọnScopeButtonIndex

1

Tôi đã làm được điều tương tự và chỉ tìm thấy điều gì đó trong diễn đàn nhà phát triển Apple: UISearchDisplayController được triển khai theo cách mà bảng kết quả sẽ không được hiển thị cho đến khi một số văn bản được nhập. Ngoài ra còn có một báo cáo lỗi về điều này: ID # 8839635.

Tôi đã làm việc xung quanh nó bằng cách đặt điều khiển phân đoạn bên dưới thanh tìm kiếm, bắt chước thanh phạm vi.

0

Đây là giải pháp thay thế sử dụng các nút phạm vi. Điều chính là thêm một ký tự phụ cho (các) phạm vi mà bạn muốn hiển thị kết quả tìm kiếm tự động, nhưng đảm bảo rằng bạn loại bỏ nó cho phạm vi mà bạn không muốn làm điều này.

Bạn sẽ cần phải thực hiện searchBar:textDidChange cũng như searchBar:selectedScopeButtonIndexDidChange:

// scope All doesn't do a search until you type something in, so don't show the search table view 
// scope Faves and Recent will do a search by default 
#define kSearchScopeAll 0 
#define kSearchScopeFaves 1 
#define kSearchScopeRecent 2 

// this gets fired both from user interaction and from programmatically changing the text 
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 
    [self initiateSearch]; 
} 


- (void)searchBar:(UISearchBar *)searchBar selectedScopeButtonIndexDidChange:(NSInteger)selectedScope{ 
    NSString *searchText = self.searchDisplayController.searchBar.text; 
    // if we got here by selecting scope all after one of the others with no user input, there will be a space in the search text 

    NSString *strippedText = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    if ((selectedScope == kSearchScopeAll) && (strippedText.length == 0) && (searchText.length != 0)){ 
     self.searchDisplayController.searchBar.text = @""; 
    } else { 
     [self initiateSearch]; 
    } 
} 

-(void)initiateSearch{ 
    NSString *searchText = self.searchDisplayController.searchBar.text; 
    NSInteger scope = self.searchDisplayController.searchBar.selectedScopeButtonIndex; 
    if ((searchText.length == 0) && (scope != kSearchScopeAll)){ 
     self.searchDisplayController.searchBar.text = @" "; 
    } 
    switch (scope) { 
     case kSearchScopeAll: 
      [self searchAll:searchText]; 
      break; 
     case kSearchScopeFaves: 
      [self searchFavorites:searchText]; 
      break; 
     case kSearchScopeRecent: 
      [self searchRecents:searchText]; 
      break; 

     default: 
      break; 
    } 
} 

// assume these trim whitespace from the search term 
-(void)searchAll:(NSString *)searchText{ 
} 

-(void)searchFavorites:(NSString *)searchText{ 
} 

-(void)searchRecents:(NSString *)searchText{ 
} 
Các vấn đề liên quan