对于当UISearchController处于活动状态时,iOS9searchBar从表标题视图中消失感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于IOSsearchBar和search
对于当UISearchController处于活动状态时,iOS 9 searchBar从表标题视图中消失感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于IOS searchBar和searchDisplayController 使用、IOS UISearchBar UISearchController使用、ios UISearchController、iOS UISearchController的使用方法的宝贵知识。
本文目录一览:- 当UISearchController处于活动状态时,iOS 9 searchBar从表标题视图中消失
- IOS searchBar和searchDisplayController 使用
- IOS UISearchBar UISearchController使用
- ios UISearchController
- iOS UISearchController的使用方法
当UISearchController处于活动状态时,iOS 9 searchBar从表标题视图中消失
结构:
View1(单击按钮)->模态显示(MyModalView:UITableViewController)
MyModalView嵌入了UISearchController。
UISearchController 的searchBar 放在MyModalView.tableView.tableHeaderView中。
自iOS 8.0起,它一直运行良好。但是在iOS 9上,
当UISearchController处于活动状态时,searchBar 消失。请在
下面看这些照片
模态视图:模态视图
在iOS 8上有效的UISearchController:iOS 8中的搜索栏
在iOS 9上有效的UISearchController:iOS 9中的搜索栏
非常标准的代码:
override func viewDidLoad() { super.viewDidLoad() // Dynamically create a search controller using anonymous function self.resultSearchController = ({ let controller = UISearchController(searchResultsController: nil) controller.searchResultsUpdater = self controller.dimsBackgroundDuringPresentation = false controller.searchBar.sizeToFit() controller.searchBar.delegate = self self.tableView.tableHeaderView = controller.searchBar return controller })() // Auto sizing row & cell height self.tableView.estimatedRowHeight = 130 self.tableView.rowHeight = UITableViewAutomaticDimension self.definesPresentationContext = true // No footer for better presentation self.tableView.tableFooterView = UIView.init(frame: CGRectZero)}
此问题在iOS 9.1 Beta中也会发生。
任何想法/指针将不胜感激
答案1
小编典典似乎我们每个人都遇到了相同的问题,但是解决
方法不同。但是,没有建议的答案对我有用:(。尽管如此,
感谢您的宝贵时间。
我有解决问题的解决方案。它正在 使用Interface Builder
在
情节提要中将我的(MyModalView:UITableViewController)的Extend Edges-Under Opaque Bars 设置为true 。
综上所述:
MyModalView:UITableViewController,在使用Interface Builder的情节提要中具有
IOS searchBar和searchDisplayController 使用
1、加的是searchDisplayController 可以在storyboard中看到 seachDisplay
2、两个代理 UISearchBarDelegate,UISearchDisplayDelegate 并设置
3、连线 searchDisplay和searchBar
4、将 self.tableView.tableHeaderView=self.searchBar 固定住
5、搜索时调用的方法
#pragma mark 搜索方法
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
NSPredicate * query=[NSPredicate predicateWithFormat:@"SELF.name contains[c]%@",searchString];
self.searchResult=[self.contacts filteredArrayUsingPredicate:query];
return YES;
}
6、搜索的时候会显示自己的tableView 确定是不是searchDisplay.searchResultsTableView
7、修改tableView count
8、跳转判断 查看联系人
#prama mark 点击搜索后搜索
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
NSString * searchString=self.searchBar.text;
NSPredicate * query=[NSPredicate predicateWithFormat:@"SELF.title contains[c]%@",searchString];
self.searchResult=[self.searchData filteredArrayUsingPredicate:query];
NSLog(@"self.searchResult%@",self.searchResult);
[self.searchDisplay.searchResultsTableView reloadData];
}
/*
#pragma mark 实时搜索
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
NSPredicate * query=[NSPredicate predicateWithFormat:@"SELF.title contains[c]%@",searchString];
self.searchResult=[self.searchData filteredArrayUsingPredicate:query];
return YES;
}
*/
参考资料
http://www.cnblogs.com/lesliefang/p/3929677.html
IOS UISearchBar UISearchController使用
http://www.cnblogs.com/xiaofeixiang/p/4273620.html
ios UISearchController
1.searchResultsUpdater:设置显示搜索结果的控制器
_mySearchController.searchResultsUpdater = self;
2.dimsBackgroundDuringPresentation:设置开始搜索时背景显示与否
_mySearchController.dimsBackgroundDuringPresentation = NO;
3.[searchBar sizeToFit]: 设置 searchBar 位置自适应
[_mySearchController.searchBar sizeToFit];
4. 设置 searchBar 为 UITableView 的头部视图
self.myTableView.tableHeaderView = self.mySearchController.searchBar;
5.UISearchResultsUpdating: 代理方法
话不多说,直接上代码
@interface ViewController ()
@property (nonatomic, strong) UITableView *myTableView;
@property (nonatomic, strong) NSMutableArray *visableArray;
@property (nonatomic, strong) NSMutableArray *filterArray;
@property (nonatomic, strong) NSMutableArray *dataSourceArray;
@property (nonatomic, strong) UISearchController *mySearchController;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self initial];
}
- (void)initial{
self.dataSourceArray = [NSMutableArray array];
self.filterArray = [NSMutableArray array];
for (int i = 0; i < 26; i++) {
for (int j = 0; j < 4; j++) {
NSString *str = [NSString stringWithFormat:@"%c%d", ''A''+i, j];
[self.dataSourceArray addObject:str];
}
}
self.visableArray = self.dataSourceArray;
self.myTableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_myTableView.delegate = self;
_myTableView.dataSource = self;
[self.view addSubview:_myTableView];
self.mySearchController = [[UISearchController alloc] initWithSearchResultsController:nil];
_mySearchController.searchResultsUpdater = self;
_mySearchController.dimsBackgroundDuringPresentation = NO;
[_mySearchController.searchBar sizeToFit];
self.myTableView.tableHeaderView = self.mySearchController.searchBar;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
if (!_visableArray || _visableArray.count == 0) {
_visableArray = _dataSourceArray;
}
return _visableArray.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"];
}
cell.textLabel.text = [_visableArray objectAtIndex:indexPath.row];
return cell;
}
- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
NSString *filterString = searchController.searchBar.text;
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF contains [c] %@", filterString];
self.visableArray = [NSMutableArray arrayWithArray:[self.dataSourceArray filteredArrayUsingPredicate:predicate]];
[self.myTableView reloadData];
}
iOS UISearchController的使用方法
UISearchController 让用户在 UISearchBar 上输入搜索关键词,展示搜索结果或者进行其他操作。UISearchController 把两个控制器(UIViewController)连在一起。父控制器放置 UISearchBar 控件。当用户点击搜索框时,UISearchBar 会移到屏幕顶部;输入搜索关键词,UISearchBar 下面出现子控制器的view。当然,也可以用代码使 UISearchBar 和子控制器展示出来,即便父控制器没有放置 UISearchBar。
一般用法
- 在父控制器中创建子控制器
- 用子控制器创建 UISearchController,通常会把 UISearchController 变成父控制器的属性
- 设置 UISearchController 的searchResultsUpdater属性
- 通常会在父控制器上放置 UISearchController 的searchBar
- 把父控制器definesPresentationContext属性设置为 true
以下为父控制器代码示例
let searchResultsVC = SearchResultsVC(allStrings: allStrings) searchController = UISearchController(searchResultsController: searchResultsVC) searchController.searchResultsUpdater = searchResultsVC; let tableView = UITableView(frame: view.bounds) tableView.dataSource = self view.addSubview(tableView) tableView.tableHeaderView = searchController.searchBar; tableView.tableFooterView = UIView() definesPresentationContext = true;
UISearchController 的searchResultsUpdater属性一般设置为父控制器或子控制器。这个属性的值要符合 UISearchResultsUpdating 协议,实现updateSearchResults(for searchController: UISearchController)方法。这个方法会在searchBar变为第一响应者(比如,当用户点击搜索框,键盘弹出),以及搜索关键词改变时调用。在这个方法中写入执行搜索、更新 UI 的代码。
以上代码将子控制器作为 UISearchController 的searchResultsUpdater。假设子控制器的数据源为 allStrings 和 strings,均为含 String 的 Array。其中,allStrings 为常量,包含所有的 String;strings 包含符合搜索条件的 String,需要在用户输入时更新。搜索条件为,含有用户输入的内容,不区分大小写。用 UITableView 展示搜索结果。在updateSearchResults(for searchController: UISearchController)方法中,获取 searchBar 的text,更新 strings,更新 UI。
以下是子控制器代码示例
func updateSearchResults(for searchController: UISearchController) { strings.removeAll() if let text = searchController.searchBar.text?.uppercased(), !text.isEmpty { strings = allStrings.filter { $0.contains(text) } } tableView.reloadData() }
改变样式
默认情况下,用户点击搜索框,导航栏(navigation bar)隐藏,UISearchBar 上移,下面能看到父控制器,但有灰色蒙版遮挡。点击灰色蒙版,退回父控制器。把 UISearchController 的hidesNavigationBarDuringPresentation属性设置为false,则导航栏不隐藏。把 UISearchController 的dimsBackgroundDuringPresentation属性设置为false,则灰色蒙版不显示,能点击父控制器。
搜索框为空时,子控制器隐藏
如果 UISearchController 的searchBar已经放置在父控制器上,用户点击搜索框时,UISearchBar 会上移至屏幕顶部,键盘弹出。此时会调用updateSearchResults(for searchController: UISearchController)方法,但子控制的view没有出现,isHidden为 true。输入内容后,子控制器的view才出现。清空输入的内容,子控制器的view消失。如果要在搜索框为空时也显示子控制器,在updateSearchResults(for searchController: UISearchController)方法中加入searchController.searchResultsController?.view.isHidden = false即可。
代码展示 UISearchBar 和子控制器的方法
在父控制中可以用代码来展示 UISearchBar 和子控制器,具体实现方法要看 UISearchController 的searchBar是否放置在父控制器上。
如果 UISearchController 的searchBar放置在父控制器上
UISearchBar 上移,弹出键盘(和用户点击搜索框一样的效果)
searchController.searchBar.becomeFirstResponder()
UISearchBar 上移,但不弹出键盘
present(searchController, animated: true, completion: nil)
或者
searchController.isActive = true
如果 UISearchController 的searchBar不在父控制器上
UISearchBar 从顶部出现,弹出键盘
present(searchController, animated: true, completion: nil)
搜索框一出来就成为第一响应者,键盘会弹出,不知道怎么禁止键盘弹出。当然,展示搜索框却不弹出键盘,是奇怪的需求。
代码已上传GitHub:https://github.com/Silence-GitHub/SearchControllerDemo
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
- iOS开发之UITableView与UISearchController实现搜索及上拉加载,下拉刷新实例代码
今天关于当UISearchController处于活动状态时,iOS 9 searchBar从表标题视图中消失的讲解已经结束,谢谢您的阅读,如果想了解更多关于IOS searchBar和searchDisplayController 使用、IOS UISearchBar UISearchController使用、ios UISearchController、iOS UISearchController的使用方法的相关知识,请在本站搜索。
本文标签: