我认为我找到了一个更好的解决方案来解决这个问题。所有之前的答案都正确地显示了一个与UITableView在搜索之前相同的暗淡视图,但每个解决方案都缺乏点击区域以取消搜索的功能。
因此,我认为这段代码更好。
首先,创建一个BOOL变量,例如searchButtonTapped,以指示是否已点击搜索按钮。默认情况下,它是NO。
然后:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
if (!searchButtonTapped) {
[controller.searchResultsTableView setBackgroundColor:[UIColor clearColor]];
[controller.searchResultsTableView setRowHeight:160];
self.searchDisplayController.searchResultsTableView.scrollEnabled = NO;
} else {
[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) {
{
else
[self.searchDisplayController setActive:NO animated:YES];
现在用户可以点击暗淡的区域,这不会导致UITableViewCell被选中,而是取消搜索。
UISearchDisplayController
被解除(我必须使用UITapGestureRecognizer
)。 (2) 在iPad上,背景颜色的alpha值应该为~0.5。 - Frantic