5

Ứng dụng của tôi sử dụng UISearchDisplayController. Khi người dùng đã nhập cụm từ tìm kiếm, tôi muốn nó vẫn hiển thị trong thanh tìm kiếm. Điều này hoạt động nếu người dùng chọn một trong các kết quả phù hợp, nhưng không phải nếu người dùng nhấp vào nút 'Tìm kiếm'.Hiển thị cụm từ tìm kiếm khi UISearchDisplayController không hoạt động

này hoạt động:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    if (tableView == self.searchDisplayController.searchResultsTableView) { 
     NSString *selectedMatch = [self.searchMatches objectAtIndex:indexPath.row]; 
     [self.searchDisplayController setActive:NO animated:YES]; 
     [self.searchDisplayController.searchBar setText:selectedMatch]; 

     return; 
    } 
    ... 

Nhưng nếu tôi làm điều tương tự trong -searchBarSearchButtonClicked: văn bản không còn vào thanh tìm kiếm. Bất kỳ ý tưởng về cách tôi có thể thực hiện điều này trong tình huống này?

Có liên quan, nếu tôi đặt văn bản của thanh tìm kiếm (nhưng để lại UISearchDisplayController không hoạt động), điều này sẽ kích hoạt hiển thị searchResultsTableView. Tôi chỉ muốn cho thấy rằng khi người dùng chạm vào thanh tìm kiếm.

Edit: Tìm thấy một workaround để thiết lập các văn bản của một thanh tìm kiếm mà không thấy searchResultsTableView bất cứ lúc nào:

// This hacky YES NO is to keep results table view hidden (animation required) when setting search bar text 
[self.searchDisplayController setActive:YES animated:YES]; 
[self.searchDisplayController setActive:NO animated:YES]; 
self.searchDisplayController.searchBar.text = @"text to show"; 

Better gợi ý vẫn hoan nghênh!

Trả lời

7

Thực ra bạn không thể sử dụng cùng một mã bên trong phương thức searchBarSearchButtonClicked vì bạn không có indexPath để chọn phần tử bên phải trong mảng tìm kiếmMatches của bạn.

Nếu người dùng nhấp vào nút tìm kiếm và bạn muốn ẩn giao diện searchController, bạn phải tìm ra văn bản cần đặt bên trong tìm kiếm (ví dụ, chọn kết quả phù hợp nhất trong danh sách).

Ví dụ này chỉ để cho các thuật ngữ tìm kiếm vẫn có thể nhìn thấy và không thay đổi khi người dùng nhấp vào nút tìm kiếm:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.searchBar.text = str; 
} 

Hope this helps, Vincent

+0

Ah cảm ơn! Tôi đã làm '[self.searchController setActive: NO animated: YES]; self.searchController.searchBar.text = searchBar.text; 'nhưng rõ ràng' searchBar.text' không còn là cái mà tôi nghĩ là do phương thức 'setActive' làm rỗng thanh tìm kiếm. –

3

Reset bằng tay chuỗi trong thanh tìm kiếm gây nên một số của các phương thức UISearchDisplayDelegate lần nữa. Đây là điều bạn có thể không muốn, trong trường hợp này.

tôi sẽ sửa đổi vdaubry trả lời một chút, và nó mang lại cho tôi:

-(void) searchBarSearchButtonClicked:(UISearchBar *)searchBar { 
    NSString *str = searchBar.text; 
    [self.searchController setActive:NO animated:YES]; 
    self.searchController.delegate = nil; 
    self.searchController.searchBar.text = str; 
    self.searchController.delegate = self //or put your delegate here if it's not self! 
} 
Các vấn đề liên quan