iOS UISearchController Class Reference

一个UISearchController对象管理基于一个搜索栏交互的搜索结果展示。你使用搜索控制器与一个已经存在的视图控制器串联。当你拥有一个可以搜索内容的视图控制器的时候,集成UISearchController的搜索栏到你的视图控制器接口。当用户使用搜索栏交互的时候,搜索控制器会自动显示你指定搜索结果的新的视图控制器。
一个搜索控制器与两个你提供的视图控制器工作。第一个视图控制器展示你的可搜索内容,第二个展示你的搜索结果。第一个视图控制器是你的应用程序的主界面的一部分,并且你可以使用任何方式展示它,使它适合你的应用程序。当初始化搜索控制器的时候,你传入第二个视图控制器到initWithSearchResultsController:方法,并且搜索控制器在适当的时候展示那个视图控制器。
每个搜索控制器提供一个UISearchBar对象,你必须将它融入到你初始化的视图控制器界面。将这个对象加入到你的包含可搜索内容的视图中。例如,如果你对可搜索的内容使用一个列表视图,你可以将搜索栏赋值给那个列表视图的tableHeaderView属性。当用户点击搜索栏来输入一个搜索词时,搜索控制器自动展示你的搜索结果的视图控制器并且通知你的应用程序搜索进程已经开始。
当用户与搜索栏交互的时候,搜索控制器通知它的searchResultsUpdater属性的对象。你提供搜索结果更新的对象你必须符合UISearchResultsUpdating协议。你使用这个协议的方法老搜索你的内容并且将结果提供给你的搜索结果视图控制器。通常情况下你的可搜索内容的视图控制器也可以用作搜索结果更新对象,但是如果你喜欢,你可以使用其它对象。
清单1展示了如何从展示可搜索内容的视图控制器中配置一个搜索控制器。。此代码创建了另一个自定义视图控制器来展示搜索结果并且使用该对象创建搜索控制器对象。当前视图控制器对象保存了一个搜索控制器的引用并且当搜索词变化时处理更新。视图控制器也充当搜索结果的呈现背景,这通常是你想要的。
清单1 创建和配置搜索控制器:

// Create the search results controller and store a reference to it.
MySearchResultsController* resultsController = [[MySearchResultsController alloc] init];
self.searchController = [[UISearchController alloc] initWithSearchResultsController:resultsController];

// Use the current view controller to update the search results.
self.searchController.searchResultsUpdater = self;

// Install the search bar as the table header.
self.tableView.tableHeaderView = self.searchController.searchBar;

// It is usually good to set the presentation context.
self.definesPresentationContext = YES;

要自定义搜索结果控制器的展示和消失,对控制器的delegate属性赋值一个对象。代理对象必须符合UISearchControllerDelegate代理。当搜索控制本身被激活和当搜索结果控制器显示或消失时通知你使用那个代理的方法。

注意:
虽然一个UISearchController对象是一个视图控制器,你永远不应该直接从你的界面呈现它。如果你想明确的呈现搜索结果界面,包裹你的搜索控制器在一个UISearchContainerViewController对象中并且推出这个对象。

初始化搜索控制器

- (instancetype)initWithSearchResultsController:(UIViewController *)searchResultsController

使用特定的视图控制器初始化并返回一个搜索控制器用来显示搜索结果。
参数:searchResultsController。显示搜索结果的视图控制器。如果你想在显示你的可搜索内容的视图控制器中显示搜索结果,特定为nil

返回值:一个初始化的搜索控制器。

创建搜索控制器之后,总是要把一个对象赋值给searchResultsUpdater属性。搜索控制器使用这个对象更新搜索结果。

管理搜索结果

@property(nonatomic, strong, readonly) UISearchBar *searchBar

在你界面安装的导航栏(只读)。
当展示你的可搜索内容之前,在你的视图控制器界面的某处安装搜索栏在这个属性。这个搜索栏变成了搜索内容的开始,与搜索栏的交互由UISearchController对象自动处理——当搜索信息变化的时候通知searchResultUpdater属性中的对象。
要使用UISearchBar的自定义子类,继承UISearchController并且实现这个属性来返回你的自定义搜索栏。

@property(nonatomic, weak) id< UISearchResultsUpdating > searchResultsUpdater
这个属性控制更新搜索结果控制器的内容。
赋值一个采用UISearchResultsUpdating协议的对象。使用这个协议的方法来搜索你的内容并且将结果提供给你的搜索结果视图控制器。这个包含于searchResultsUpdater的对象往往是初始化时设置的视图控制器。

@property(nonatomic, strong, readonly) UIViewController *searchResultsController
显示搜索结果的视图控制器
当用户在搜索栏中输入文本的时候,搜索控制器立即显示这个视图并且没有任何动画。你负责传入搜索结果到这个视图控制器使它们展示出来。你使用searchResultsUpdater属性中的对象做这个。
当这个属性的值为nil的时候,搜索控制器不会为搜索结果推出一个单独的视图控制器。相反,你应该使用包含搜索栏和可搜索内容的原始视图控制器显示结果。

@property(nonatomic, assign, getter=isActive) BOOL active
搜索界面的呈现状态。
当用户点击正在编辑的搜索栏的输入框的时候,搜索控制器自动显示搜索结果控制器。通常,你获取这个属性的值来确定搜索结果是否已经呈现。然而,你可以设置这个属性的值为YES来迫使搜索界面呈现,即使用户没有点击搜索框。
这个属性的默认值是NO。

配置搜索界面

@property(nonatomic, assign) BOOL obscuresBackgroundDuringPresentation

一个布尔值,指示搜索时底层的内容是否被隐藏。
当这个属性的值为YES的时候,当你与搜索栏交互的时候会隐藏包含可搜索内容的视图控制器。当这个属性的值为NO的时候,搜索控制器不会隐藏原来的视图控制器。这个属性仅仅控制最初是否隐藏原来的视图控制器。当用户在搜索栏中输入文本的时候,搜索控制器立即将结果显示在搜索结果控制器中。
如果使用相同的视图控制器来展示可搜索内容和搜索结果,建议你将此属性设置为NO。这个属性的默认值为NO。

@property(nonatomic, assign) BOOL dimsBackgroundDuringPresentation

布尔值,指示搜索过程中是否将底层的内容显示为灰色。
使用obscuresBackgroundDuringPresentation属性代替。

@property(nonatomic, assign) BOOL hidesNavigationBarDuringPresentation

补位置,指示自搜索时是否将导航栏隐藏。
这个属性的默认值为YES。

访问代理

@property(nonatomic, weak) id< UISearchControllerDelegate > delegate

搜索控制器的代理。
当搜索结果视图控制器展示和消失的时候使用代理对象来收到通知。你可能使用这些通知来自定义搜索界面或执行相关操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值