搜索控制器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。接下来的话,需要对导航栏上面的其他控件,比如返回按钮重新进行位置的调整。

 

posted @   码出境界  阅读(2032)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示