私はこの問題のより良い実装を見つけたと思います。これまでのすべての回答は、検索前のUITableViewと同じ淡色表示を正しく示していますが、各ソリューションには、検索をキャンセルするために領域をタップする機能がありません。
そのため、このコードの方がうまくいくと思います。
まず、searchButtonTappedなどのBOOLを作成して、検索ボタンがタップされたかどうかを示します。デフォルトではNOです。
それで:
- (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が表示されて選択されることはなく、代わりに検索がキャンセルされます。