美文网首页
iOS原生搜索框

iOS原生搜索框

作者: 十三_Black | 来源:发表于2016-07-19 12:05 被阅读470次

    实现搜索功能的方法有很多种,这里说一下系统原生的方法,超级简单。下面看一下效果:

    首先我们要创建一个UITableViewController用来展示数据,然后我们再实例化两个控制器

    @interface JYTableViewController()<UISearchControllerDelegate,UISearchResultsUpdating>

    //查询控制器

    @property(nonatomic,strong)UISearchController*searchController;

    //查询结果控制器

    @property(nonatomic,strong)JYResultTableViewController*resultsController;

    //展示数据的数组

    @property(nonatomic,strong)NSMutableArray*dataArray;

    @end

    然后懒加载数组,并设置数局

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

    -(NSArray*)dataArray{

            if(!_dataArray) {

                   _dataArray= [NSMutableArrayarrayWithCapacity:20];  

                   for(inti =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];

    returncell;

    }

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

    - (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];

    }

    //   最后就是把数据展示在查询结果的UITableViewController里就OK了。

    相关文章

      网友评论

          本文标题:iOS原生搜索框

          本文链接:https://www.haomeiwen.com/subject/yllqjttx.html