其实使用uisearchBar和tableView的搭配也可以达到类似的效果,不过貌似需要更多的设置
这里讲解一下UISearchDisplayController的使用
首先可以看到UISearchDisplayController并非是viewController而是继承NSobject 其中整合了uisearchBar来实现搜索 tableView负责数据展示
- (UISearchDisplayController *)searchDisController{
if (!_searchDisController) {
_searchDisController = [[UISearchDisplayController alloc] initWithSearchBar:self.searchBar contentsController:self];
_searchDisController.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
_searchDisController.delegate = self;
[_searchDisController setSearchResultsDataSource:self];
[_searchDisController setSearchResultsDelegate:self];
}
return _searchDisController;
}
使用属性声明一个UISearchDisplayController 在此声明中需要一个uisearchBar 其次就是设置代理 其中包括tableView和自身的 代理方法看名称就能想到作用 代理方法会自动的执行tableView的reload方法 ios6和ios7又有点不一致 其中ios6_searchDisController.searchResultsTableView reload时可以执行 然而ios7却不能执行
ios7默认的0,0位置是从最左上角的状态栏开始的,而ios6是状态栏下开始的 如果有导航栏的话则是从导航栏开始 不过可以通过一个属性edgesForExtendedLayout可以设置成一样
if (IOS7_OR_LATER) {
self.searchDisController.displaysSearchBarInNavigationBar = YES;
[self.searchDisController.searchResultsTableView setFrame:CGRectMake(0, 64, kDeviceWidth, kDeviceHeight - 64)];
}else
{
[self.view addSubview:self.searchBar];
[self.searchDisController.searchResultsTableView setFrame:CGRectMake(0,0, kDeviceWidth, kDeviceHeight)];
}
ios7将搜索框放在导航栏上 ios6则加载导航栏下方 如果是直接加载导航栏上的话 进入全屏搜索的话取消按钮就出不来
设置searchDisController的Activev可以设置searchDisController的searchResultTableView显示 当点击searchBar是就会进入全名搜索模式
此时可以在uisearchBar的代理和uisearchDisplayerController的代理方法中进行响应的操作 如searchBar显示出取消按钮登操作 具体看情况而定
在实现tableView的代理时要注意如果tableView不止一个时需要在代理方法中判断一下
if(tableView == self.searchDisplyerController.searchReultTabeView)
执行响应的操作
大概就是这个样子了 具体的实现也得看具体是需求了