UISearchDisplayController搜索栏控制器

本文深入探讨了UISearchDisplayController在iOS应用中如何实现搜索功能,包括其内部结构、属性和代理协议,以及如何通过这三个协议进行数据的查询、刷新和显示。着重介绍了初始化函数、代理属性及其作用,为开发者提供了一站式的指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//UISearDiaplayController继承于NSObject的控件,自身包含UITableView控件,用于显示搜索结果的列表

//数据的查询和刷新使用代理,实现查询和显示的功能需要遵守UITableViewDataSource,UITableViewDelegate, UISearchDisplayDelegate三个协议

//下面只我在XCode复制出来的类,做了小小的翻译,如有不对麻烦纠正

@interface UISearchDisplayController : NSObject


//初始化函数,绑定搜索栏和指定视图控制器  PS:不明白blog总是说它里面含有UISearchBar这个控件,既然需要外部指定才有的,何来的包含???求解

- (instancetype)initWithSearchBar:(UISearchBar *)searchBar contentsController:(UIViewController *)viewController;


//代理属性  条件:遵守UISearchDiaplayDelegate协议

@property(nullable,nonatomic,assignid<UISearchDisplayDelegate> delegate;


@property(nonatomic,getter=isActive)BOOL active; //控制导航栏是否获得焦点


- (void)setActive:(BOOL)visible animated:(BOOL)animated; //设置导航栏是否获得焦点,是否有动画效果


@property(nonatomic,readonly)UISearchBar *searchBar;//初始化函数所绑定的UISearchBar


@property(nonatomic,readonly)UIViewController *searchContentsController;//初始化绑定 的控制器

@property(nonatomic,readonly)UITableView *searchResultsTableView;  //显示搜索结果的UITableView

@property(nullable,nonatomic,weak)id<UITableViewDataSource> searchResultsDataSource;  //给UITableview指定代理(必须指定)

@property(nullable,nonatomic,weak)id<UITableViewDelegate> searchResultsDelegate;    //给UITableview指定代理(必须指定)

@property(nullable,nonatomic,copy)NSString *searchResultsTitleNS_AVAILABLE_IOS(5_0);//搜索结果的标题


@property (nonatomic,assign)BOOL displaysSearchBarInNavigationBarNS_AVAILABLE_IOS(7_0);//控制搜索时导航栏是否显示

@property (nullable,nonatomic,readonly)UINavigationItem *navigationItemNS_AVAILABLE_IOS(7_0);


@end


@protocol UISearchDisplayDelegate <NSObject>


@optional

- (void) searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controllerNS_DEPRECATED_IOS(3_0,8_0);


- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controllerNS_DEPRECATED_IOS(3_0,8_0);//活的焦点时调用的方法


- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controllerNS_DEPRECATED_IOS(3_0,8_0);


- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controllerNS_DEPRECATED_IOS(3_0,8_0);//失去焦点时调用的方法


//加载数据到tableview时调用的操作

- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


//卸载数据时做的操作

- (void)searchDisplayController:(UISearchDisplayController *)controller willUnloadSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


// 控制tableview的显示或隐藏

- (void)searchDisplayController:(UISearchDisplayController *)controller willShowSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


- (void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


- (void)searchDisplayController:(UISearchDisplayController *)controller willHideSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


- (void)searchDisplayController:(UISearchDisplayController *)controller didHideSearchResultsTableView:(UITableView *)tableViewNS_DEPRECATED_IOS(3_0,8_0);


//常用的代理方法,返回YES表示搜索完后无需手动reload tableView显示搜索结果,系统自动加载

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(nullableNSString *)searchString NS_DEPRECATED_IOS(3_0,8_0);


//切换搜索范围的时候调用该函数

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOptionNS_DEPRECATED_IOS(3_0,8_0);


@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值