1. UISearchController
UISearchController虽然叫做Controller,但是和普通的控制器有区别,它提供了一个默认样式的UISearchBar和激活,关闭搜索控制器的动画效果。iOS系统应用-设置-中的搜索功能就是用的UISearchController,如果需求的效果和系统设置中的效果一样可以使用UISearchController,当前也可以自己实现,自己实现动画。
2. API
// 初始化方法需要传入一个searchResultsController,这个控制器可以是当前控制器,也可以是一个新的控制器,注意想让当前控制器作为搜索结果控制器传入nil即可,不要传入self会引起崩溃
- (instancetype)initWithSearchResultsController:(nullable UIViewController *)searchResultsController;
// 当searchBar文字改变的时候会通知的代理对象,注意这个对象要和上面传入的对象一致,不然崩溃
@property (nullable, nonatomic, weak) id <UISearchResultsUpdating> searchResultsUpdater;
// 如果设置为YES,会以默认方式展示搜索控制器
@property (nonatomic, assign, getter = isActive) BOOL active;
@property (nullable, nonatomic, weak) id <UISearchControllerDelegate> delegate;
// 默认值YES,和obscuresBackgroundDuringPresentation属性的效果一样,控制器searchController展示的时候是否有黑色的背景.
@property (nonatomic, assign) BOOL dimsBackgroundDuringPresentation;
@property (nonatomic, assign) BOOL obscuresBackgroundDuringPresentation;
// 是否隐藏导航栏 默认YES
@property (nonatomic, assign) BOOL hidesNavigationBarDuringPresentation;
@property (nullable, nonatomic, strong, readonly) UIViewController *searchResultsController;
// 可以拿到searchBar自定义显示效果
@property (nonatomic, strong, readonly) UISearchBar *searchBar;
3. 经典用法
iOS11之前的经典用法是创建searchController然后把searchBar设置给tableView的headerView,效果如下 searchBar作为headerView.png3. iOS11新用法
iOS11给navigationItem添加了一个UISearchController类型的属性,也就是可以给一个控制器的navigationItem设置一个搜索控制器,效果的话就是到导航栏中显示一个searchBar,遇到滚动页面的话可以设置在滚动的时候隐藏和显示searchBar,系统中的设置界面就是这样的效果。
// 通过设置该属性可以让其包含的控制器的导航栏中显示搜索栏
@property (nonatomic, retain, nullable) UISearchController *searchController
// 同样是iOS11新增的属性,这个属性是在上一个属性设置的前提下控制滚动的时候searchBar的显示效果,就是当控制器中有滚动视图滚动的时候,searchBar是隐藏还是一直显示固定在导航栏的下边,默认值是YES
@property (nonatomic) BOOL hidesSearchBarWhenScrollings
iOS11下系统设置界面的效果
设置.png iOS11下新用法.png
4. 代码
起始UISearchController只是提供了一个默认样式的UISearchbar和展示和隐藏的动画,具体搜索什么内容,怎么搜索,搜索结果的展示都需要自己去实现demo
网友评论