13

Tôi có một UISearchDisplayController có trong headerview cho UITableView của tôi. Tôi muốn biết khi searchResultsTableView của UISearchDisplayController được hiển thị để tôi có thể làm một số hoạt động khác:Làm cách nào để xác định xem tìm kiếm của UISearchDisplayController có được hiển thị không?

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

trả về true tất cả các thời gian ngay cả khi searchResultsTableView được hiển thị. Làm thế nào tôi có thể tìm ra điều này?

Trả lời

35

Điều này cần thực hiện thủ thuật.

[self.searchDisplayController isActive] 
+1

'[self.searchDisplayController isActive]' không cho bạn biết 'searchResultsTableView' được hiển thị hay không. Nó cho bạn biết rằng tìm kiếm đã được kích hoạt (ví dụ thanh tìm kiếm là trả lời đầu tiên), nhưng nếu bạn xóa bất kỳ văn bản hiện có nào trong thanh tìm kiếm (nhưng vẫn tiếp tục ở chế độ tìm kiếm), 'searchResultsTableView' sẽ bị ẩn, nhưng' isActive' vẫn tiếp tục trả lại CÓ. – junjie

+0

@junjie Bạn có gợi ý 'searchResultsTableView.hidden == NO' sẽ chính xác hơn không? – devios1

+2

@chaiguy Tôi kiểm tra 'searchDisplayController.searchBar.text.length' ngoài' searchDisplayController.isActive'. Tại sao không 'searchDisplayController.searchResultsTableView.hidden == NO'? Tôi không thể nhớ nếu nó làm việc, nhưng lý do khác là accessor 'searchResultsTableView' khởi tạo xem bảng không cần thiết ngay cả khi người dùng không ở chế độ tìm kiếm. – junjie

3

Cách sử dụng các phương thức ủy nhiệm cho UISearchDisplayController?

searchDisplayController:willShowSearchResultsTableView: 
searchDisplayController:didShowSearchResultsTableView: 
searchDisplayController:willHideSearchResultsTableView: 
searchDisplayController:didHideSearchResultsTableView: 

Bất kỳ lý do nào không hiệu quả với bạn?