搜索控制器UISearchController的使用
说明:本文主要是将系统UISearchController控件声明文件中的属性、方法、代理等介绍下,后续再联合【搜索栏UISearchBar】这篇文章一起更新更实用的信息。
1、初始化
// 如果设置searchResultsController参数为nil,代表搜索后的结果不显示在当前控制器之上 - (instancetype)initWithSearchResultsController:(UIViewController *)searchResultsController;
2、代理
@property(nonatomic, weak) id<UISearchControllerDelegate> delegate;
UISearchControllerDelegate:
// 当用户在搜索控制器中开始编辑时或者将active属性设置为YES时,该方法被调用 - (void)presentSearchController:(UISearchController *)searchController; // 当搜索控制器即将出现时 - (void)willPresentSearchController:(UISearchController *)searchController; // 当搜索控制器已经出现时 - (void)didPresentSearchController:(UISearchController *)searchController; // 当搜索控制器即将消失时 - (void)willDismissSearchController:(UISearchController *)searchController; // 当搜索控制亲已经消失时 - (void)didDismissSearchController:(UISearchController *)searchController;
3、管理搜索结果
// 在呈现搜索控制器执之前,将搜索栏放置在视图控制器界面的某个位置。点击搜索栏为起点。与搜索栏的交互是由UISearchController自动处理的 @property(nonatomic, strong, readonly) UISearchBar *searchBar; // 该协议是用来监控将搜索结果传递到搜索结果控制器的过程的 @property(nonatomic, weak) id<UISearchResultsUpdating> searchResultsUpdater; // 搜索结果控制器 @property(nonatomic, strong, readonly) UIViewController *searchResultsController; // 当用户点击搜索栏后,搜索控制器会出现,并且搜索结果控制器也会自动的显示出来。通常利用这个属性是为了确定当前是否显示了搜索结果。但是也可以将此属性设置为YES,这样就会强制显示出搜索界面。 默认为NO @property(nonatomic, assign, getter=isActive) BOOL active;
UISearchResultsUpdating:
// 只要搜索栏成为第一响应者或者对搜索栏中的文本进行更改,就会自动调用此方法。在此方法中进行过滤或者更新 - (void)updateSearchResultsForSearchController:(UISearchController *)searchController;
4、配置搜索界面
// 当此属性为YES时,只要用户与搜索栏进行交互,搜索控制器就会遮住包含可搜索内容的视图控制器。当此属性为NO时,搜索控制器不会遮住原始视图控制器。该属性仅仅是控制原始视图控制器是否最初被遮挡。当用户开搜索栏中输入文本时,搜索控制器就会立即显示搜索结果控制器和结果。 // 如果使用同一个控制器来显示可搜索内容和搜索结果,建议将此属性设置为NO。此属性的默认为YES @property(nonatomic, assign) BOOL obscuresBackgroundDuringPresentation; // 在搜索过程中底层内容是否变暗 @property(nonatomic, assign) BOOL dimsBackgroundDuringPresentation; // 当出现搜索控制器的时候是否隐藏导航栏。默认为YES @property(nonatomic, assign) BOOL hidesNavigationBarDuringPresentation;
二、使用过程中注意的问题
1、如果将UISearchController中的属性searchBar作为导航栏的titleView,在iOS11以后,导航栏的高度将不再是44,而是56。接下来的话,需要对导航栏上面的其他控件,比如返回按钮重新进行位置的调整。
分类:
iOS开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了