Вы правы, что именно UISearchDisplayController управляет эффектом "затемнения", который вы видите.
Что делает UISearchDisplayController, так это добавление UIControl в качестве подпредставления к представлению searchContentsController (свойство UISearchDisplayController), которое, скорее всего, является вашим контроллером детального просмотра. Этот UIControl - просто альфа-представление с серым фоном. Кажется, у него есть обработчик событий, который завершает поиск при нажатии.
Чтобы ограничить эффект затемнения вашим вспомогательным видом подробного вида, вам нужно сделать три вещи. (Я предполагаю, что ваш детализированный контроллер определен через XIB. Если нет, эти шаги можно выполнить и в коде.)
1) добавьте новый UIViewController в ваш xib детального представления-контроллера. Подключите этот новый контроллер вида к IBOutlet вашего контроллера детального вида. В моем примере я называю это «_searchAreaViewController». Это важно, даже если вы никогда не получите доступ к контроллеру представления (но помните, что вам придется выпустить его в какой-то момент)
@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate, UITableViewDelegate, UITableViewDataSource> {
UIPopoverController *popoverController;
UIToolbar *toolbar;
id detailItem;
UILabel *detailDescriptionLabel;
IBOutlet UIViewController* _searchAreaViewController;
}
2) сделайте содержащий представление для вашей области поиска видом этого нового контроллера представления. Чтобы сделать это, используйте Interface Builder, чтобы установить новый выход для ссылки для этого представления, перетащив выход в searchAreaViewController и выбрав выход «view». Вы должны иметь содержащее представление - это должно быть подпредставлением вашего подробного представления, и оно должно содержать UISearchBar и, вероятно, ваш UITableView.
3) заставить свойство searchContentsController объекта UISearchDisplayController ссылаться на этот новый контроллер представления вместо контроллера подробного представления. Это можно сделать только через Interface Builder, так как свойство доступно только для чтения (у IB есть какое-то волшебство, чтобы сделать эту работу?) Если вам нужно выполнить этот шаг с помощью кода, вам придется создать подкласс UISearchDisplayController и вернуть правильное значение из переопределение свойства "searchContentsController".
Я сделал пример приложения, чтобы продемонстрировать это, и единственная строка кода, которую мне пришлось добавить в шаблон SplitView, была та, которая была указана в шаге 1 выше. Все остальное - просто добавление представлений / контроллеров и их правильное соединение в IB.
удачи!