使用 UITextField 和 UISearchDisplayController 代替 UISearchBar
Posted
技术标签:
【中文标题】使用 UITextField 和 UISearchDisplayController 代替 UISearchBar【英文标题】:Using UITextField with a UISearchDisplayController in place of a UISearchBar 【发布时间】:2012-05-29 19:18:16 【问题描述】:如何在 UISearchDisplay 控制器中使用文本字段而不是搜索栏?
我想通过去掉放大镜图标和自定义背景来完全自定义搜索栏。还阻止它调整大小并调出“取消”按钮。我看到有些人通过编辑不应该编辑的搜索栏 api 部分使用 hacky 方法来做到这一点。因此,在此级别上进行自定义似乎更被接受的方法是使用 UITextfield 而不是 UISearchBar。但是网上似乎没有任何关于这样做的信息!
如果我使用文本字段,当文本更改时我需要调用哪些方法才能使 UISearchDisplayController 工作?
【问题讨论】:
【参考方案1】:这里的技巧是重写 UISearchDisplayController。它实际上只做 3 件事。
-
将搜索栏移到视图顶部并隐藏 UINavigationBar。
在视图的其余部分放置一个透明的封面视图。
显示带有任何搜索结果的 UITableView。
因此,首先将您的 UIViewController 注册为 UITextField 的委托,然后......
-(void)textFieldDidBeginEditing:(UITextField *)textField
//here is where you open the search.
//animate your textfield to y = 0.
//I usually make the search tableview and the cover a separate view,
//so I add them to my view here.
[self.navigationController setNavigationBarHidden:YES animated:YES];
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
NSString *searchText = [[NSString alloc] initWithString:[textField.text stringByReplacingCharactersInRange:range withString:string]];
//display your search results in your table here.
-(void)textFieldDidEndEditing:(UITextField *)textField
//hide all of your search stuff
[self.navigationController setNavigationBarHidden:NO animated:YES];
【讨论】:
以上是关于使用 UITextField 和 UISearchDisplayController 代替 UISearchBar的主要内容,如果未能解决你的问题,请参考以下文章
IOS RxSwift中UISearch栏文本和视图模型属性之间的两种方式绑定
如何从 Appdelegate 方法 applicationWillEnterForeground 重置 UISearch