Панель области действия под UISearchBar - PullRequest
14 голосов
/ 09 апреля 2010

У меня есть UISearchBar и UISearchDisplayController, все отлично работает, но мой селектор области видимости отображается рядом с текстовым полем, а не под ним. Я знаю, что это ожидаемое действие, когда устройство находится в альбомной ориентации, но, поскольку у меня UISearchBar в главном представлении UISplitViewController, в конечном итоге он выглядит следующим образом:

UISearchBar problem

Есть ли способ заставить панель области отображаться под текстовым полем во всех ориентациях интерфейса (я знаю, что это хорошо работает в Mail.app на iPad, так что это возможно, но кто знает, если Apple решила скрыть вариант сделать так)

Ответы [ 4 ]

3 голосов
/ 19 мая 2010

Это не часть публичного API.Надеюсь, это будет добавлено в будущем.Этого можно достичь с помощью частных API, в этом вам поможет просмотр дампа класса UIKit.

Удачи!

edit: обратите внимание, что использование частных API может привести к отклонению из магазина приложений,как большинство людей уже знают.

2 голосов
/ 12 марта 2012

Я использовал UISearchDisplayDelegate, чтобы показать и скрыть панель области.

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
{
    [controller.searchBar setShowsScopeBar:YES];
}

-(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
    [controller.searchBar setShowsScopeBar:NO];
}
1 голос
/ 19 июня 2013

Не используйте частные API. Вместо этого следуйте рекомендациям Apple из Руководства по пользовательскому интерфейсу IOS:

При наличии панели поиска рядом с ней может появиться панель области. область видимости отображается под строкой поиска независимо от ориентации, если вы не используете контроллер отображения поиска в вашем коде (для более информацию о том, как это работает, смотрите в UISearchDisplayController Class Ссылка). Когда вы используете контроллер отображения поиска, область видимости отображается в строке поиска справа от поля поиска, когда устройство находится в альбомной ориентации (в портретной под строкой поиска).

Это сработало для меня, используя раскадровки.

0 голосов
/ 18 ноября 2013

Почему бы просто не настроить панель поиска программно? Вот что я использую в своем текущем проекте. Он скрывает панель поиска до тех пор, пока пользователь не прокручивает вверх, а область ввода загружается под текстовое поле, когда они начинают печатать элементы. Оттуда просто отфильтруйте как обычно:

- (void)setupSearchBar {
self.searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, 44)];
self.searchBar.showsScopeBar = YES;
self.searchBar.scopeButtonTitles = [NSArray arrayWithObjects:@"Users", @"Groups", nil];
self.tableView.tableHeaderView = self.searchBar;

CGPoint offset = CGPointMake(0, self.searchBar.frame.size.height);
self.tableView.contentOffset = offset;

self.searchController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar
                                                          contentsController:self];
self.searchController.searchResultsDataSource = self;
self.searchController.searchResultsDelegate = self;
self.searchController.delegate = self;
}

звоните [self setupSearchBar]; в viewDidLoad, вы отправляетесь в гонки.

...