我想我为这个问题找到了更好的实现。所有先前的答案都正确显示了一个与搜索前 UITableView 相同的暗色视图,但是每个解决方案都缺少点击该区域以取消搜索的功能。
出于这个原因,我认为这段代码效果更好。
首先,创建一个诸如searchButtonTapped 之类的BOOL 来指示搜索按钮是否被点击。默认为否。
然后:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
if (!searchButtonTapped) {
// To prevent results from being shown and to show an identical look to how the tableview looks before a search
[controller.searchResultsTableView setBackgroundColor:[UIColor clearColor]];
[controller.searchResultsTableView setRowHeight:160];
self.searchDisplayController.searchResultsTableView.scrollEnabled = NO;
} else {
// Restore original settings
[controller.searchResultsTableView setBackgroundColor:[UIColor whiteColor]];
[controller.searchResultsTableView setRowHeight:44];
self.searchDisplayController.searchResultsTableView.scrollEnabled = YES;
}
return YES;
}
现在应该根据其他答案清楚这一点。确保在用户点击“搜索”按钮时也恢复原始设置。
此外,在 cellForIndexPath 方法中添加:
cell.selectionStyle = UITableViewCellSelectionStyleNone;
cell.contentView.backgroundColor = [UIColor colorWithWhite:0.0 alpha:0.8];
为了创建在输入文本之前显示的相同的暗视图。确保将这些属性应用于正确的单元格,即检查哪个 UITableView 处于活动状态以及用户没有点击“搜索”按钮。
然后,至关重要的是,在 didSelectRowAtIndexPath 中:
if (tableView == self.searchDisplayController.searchResultsTableView) {
if (searchButtonTapped) {
// Code for when the user select a row after actually having performed a search
{
else
[self.searchDisplayController setActive:NO animated:YES];
现在用户可以点击变暗的区域,这不会导致 UITableViewCell 的可见选择,而是取消搜索。