如何在导航栏中显示UISearchBar?
我不知道如何实现。
非常感谢您的帮助。
self.navigationItem.titleView = self.searchBarTop;
将搜索栏放置在导航栏的左侧或右侧:UIBarButtonItem *searchBarItem = [[UIBarButtonItem alloc] initWithCustomView:searchBar];
self.navigationItem.rightBarButtonItem = searchBarItem;
displaysSearchBarInNavigationBar = YES
设置为轻松实现此功能。自iOS 7.0开始,您可以通过配置搜索显示控制器的displaysSearchBarInNavigationBar和navigationItem属性,使用带导航栏(UINavigationBar类的实例)的搜索显示控制器。
self.searchDisplayController.displaysSearchBarInNavigationBar = YES;
。您可能希望在编辑时显示取消按钮或隐藏返回按钮,因此可以在委托实现中完成这个操作。 - Bohrnsen正如一位评论者所指出的那样,使用searchDisplayController.displaysSearchBarInNavigationBar = true
会导致隐藏任何现有的左/右栏按钮项。
我发现了两种不同的方法来添加一个searchBar
到iOS7的新属性searchDisplayController
中的navigationBar
。
1)Nib方法
如果你使用一个.xib文件,你可以为这个值设置一个用户定义的运行时属性,由于某些原因,leftBarButtonItem仍然保持不变。我没有测试过rightBarButtonItem。
2)代码(时间很重要)
如果想在代码中实现,时间似乎很重要。看起来你必须先将searchBar
添加到navigationBar
中,然后设置你的barButtonItem
。
- (void)viewDidLoad
{
...
self.searchDisplayController.displaysSearchBarInNavigationBar = true;
self.navigationItem.leftBarButtonItem = [UIBarButtonItem new];
...
}
self.navigationItem.leftBarButtonItem = self.leftButton
(其中 self.leftButton 是左侧按钮的输出)。 - Peter看看苹果的UICatalog示例代码。它展示了如何以三种不同方式使用新的UISearchController
: 模态、在导航栏中和在导航栏下方。
在NavigationBar中使用UISearchBar的Objective C代码片段
- (void)viewDidLoad {
UISearchController *searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
if (@available(iOS 11.0, *)) {
self.navigationItem.searchController = searchController;
} else {
self.navigationItem.titleView = searchController.searchBar;
}
}
Read more here
searchDisplayController
就不再显示了。cellForRowAtIndexPath:
方法也不会被调用。使用searchDisplayController.displaysSearchBarInNavigationBar
可以解决问题,但是我不能使用它,因为我还要支持 iOS 6... - jdev