iOS中搜索框的实现

来源:互联网 发布:触发器 sql 编辑:程序博客网 时间:2024/06/05 02:20

iOS中有多种实现搜索功能的方法,这里我们用系统提供的原生的类(UISearchController)来实现以下,相对来说还是很简单的。

效果图为:

                              


废话补多说,上代码:

首先我们要有个一个展示数据的tableView,我这里叫JYTableViewController。

然后在

#import "JYTableViewController.h"里实例化两个控制器和一个用来存放数据的数组


//  查询控制器

@property (nonatomic,strong)UISearchController *searchController;

//  查询结果控制器

@property (nonatomic,strong)JYResultTableViewController *resultsController;

//  展示数据的数组

@property (nonatomic,strong)NSMutableArray *dataArray;


我这里通过懒加载创建数组并对其进行赋值:

//  懒加载要展示数据的数组

-(NSArray *)dataArray{

    if (!_dataArray) {

        _dataArray = [NSMutableArrayarrayWithCapacity:20];//这个数量没什么用,但是要注意创建的数组是可变的

        // for循环添加数据

        for (int i =0; i <20; i++) {

            [_dataArrayaddObject:[NSStringstringWithFormat:@"%@ --> %d",@"BlackSky",i]];

        }

    }

    return_dataArray;

}


下面代码都有很详细的注释,我就不一一解释了

- (void)viewDidLoad {

    [superviewDidLoad];

    //  实例化查询结果控制器,(这里一定是要先实例化查询结果控制器,因为创建搜索控制器的时候是要一有一个搜索结果控制器的,如果不按照这个顺序,先创建搜索控制器,这时候用来展示搜索结果的控制器是空,所以不会展示数据)

    self.resultsController = [[JYResultTableViewControlleralloc]init];

    //  实例化搜索控制器

    self.searchController = [[UISearchControlleralloc]initWithSearchResultsController:_resultsController];

    //  设置搜索框为tableView的头视图

    self.tableView.tableHeaderView =self.searchController.searchBar;

    //  设置查询代理

    self.searchController.delegate =self;

    //  注意不要忘记设置查询更新结果的代理,这个代理的名字不按常规出牌

    self.searchController.searchResultsUpdater =self;

}


#pragma mark - Table view data source


//  返回组数

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {

    return1;

}


//  返回每组的行数

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    returnself.dataArray.count;

}


//  返回cell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:reuseIdentifier];

    if (!cell) {

        cell = [[UITableViewCellalloc]initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:reuseIdentifier];

    } 

    cell.textLabel.text =self.dataArray[indexPath.row];

    return cell;

}


//  实现查询结果处理的代理方法,注:这是一个必须实现的方法。

- (void)updateSearchResultsForSearchController:(UISearchController *)searchController{

    //  设置谓词,谓词就是根据输入的内容去匹配数据,并返回一个查询的结果

    NSPredicate *predicate = [NSPredicatepredicateWithFormat:@"SELF CONTAINS[c] %@",self.searchController.searchBar.text];

    //  设置查询结果界面要显示的数据

//    self.resultsController.serachResults = [NSMutableArray arrayWithArray:[self.dataArray filteredArrayUsingPredicate:predicate]];

    NSMutableArray *array = [NSMutableArrayarrayWithArray:[self.dataArrayfilteredArrayUsingPredicate:predicate]];

    self.resultsController.serachResults = array;

    //  不要忘记刷新结果数据界面

    [self.resultsController.tableViewreloadData];

}


然后就是展示结果的tableView的控制器用来显示数据,

@interface JYResultTableViewController :UITableViewController

//  查询结果控制器

@property (nonatomic,strong)NSArray *serachResults;//注,此属性写在.h文件里,为了外界访问

@end


.m文件里就根据serachResults数组里的匹配数据进行相应展示就好。





0 0
原创粉丝点击