在UISearchBar下强制范围栏

时间:2010-04-08 20:04:17

标签: iphone cocoa-touch scope uisearchbar uisearchdisplaycontroller

我有一个UISearchBar和UISearchDisplayController,一切都很好但我的范围选择器显示在文本字段旁边而不是在它下面。我知道这是设备在横向时的预期操作,但由于我在UISplitViewController的主视图中有UISearchBar,它最终看起来像这样:

UISearchBar problem

有没有办法强制范围栏显示在所有界面方向的文本字段下面(我知道这在iPad上的Mail.app中很好用,所以可能,但是谁知道Apple是否决定隐藏这样做的选项)

4 个答案:

答案 0 :(得分:3)

这不是公共API的一部分。希望它将来会被添加。它可以使用私有API来完成,查看UIKit类转储将帮助您。

祝你好运!

编辑:请注意,使用私有API可能会让您从应用商店中被拒绝,就像大多数人已经知道的那样。

答案 1 :(得分:2)

我使用UISearchDisplayDelegate来显示和隐藏范围栏。

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

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

答案 2 :(得分:1)

不要使用私有API。相反,请遵循IOS用户界面指南中的Apple建议:

  

当存在搜索栏时,可在其附近显示范围栏。该   范围栏显示在搜索栏下方,无论方向如何,   除非您在代码中使用搜索显示控制器(更多信息)   有关其工作方式的信息,请参阅UISearchDisplayController类   参考)。使用搜索显示控制器时,范围栏为   显示在搜索栏右侧的搜索栏中   设备处于横向(纵向,是   在搜索栏下方。)

这对我使用故事板很有用。

答案 3 :(得分:0)

为什么不以编程方式设置搜索栏?这是我在当前项目中使用的内容。它会隐藏搜索栏,直到用户向上滚动,并且当他们开始键入项目时,范围栏将加载到文本字段下方。从那里开始像往常一样过滤:

- (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;
}

在viewDidLoad中调用[self setupSearchBar];即可参加比赛。