美文网首页
UISearchController的运用

UISearchController的运用

作者: Augus_man | 来源:发表于2016-11-22 16:53 被阅读73次

            最近写程序会用到UISearchController(下文SC代替吧),所以第一反应是来找度娘取jing,但是看了好多文章也没搞清楚这个SC到底怎么用,后来参考了一下自己试着搞了几下,勉强可以了,下面就讲一下简单的一些运用,写的不好勿喷!

            首先我要实现的效果是在主页先有一个searchBar(不实现)点击后跳到真正的搜索界面(我看了几个大的商城网站都是这么做的),然后在这个界面进行 数据的请求。

    #pragma mark 设置搜索框代理

    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar{

    YZJSearchVC *SVC=[[YZJSearchVC alloc]init];//我的真正搜索界面 继承UIviewController 当然UITableViewController最好

    [self.navigationController pushViewController:SVC animated:YES];

    return NO;

    }

        然后就是实现了.h文件

    #import <UIKit/UIKit.h>

    @interface YZJSearchVC : UIViewController  (看清是继承的它)

    @end

    .m 文件

    #import "YZJSearchVC.h"@interface YZJSearchVC ()                                                              @property (weak, nonatomic) IBOutlet UITableView *tableView;//tableView 是XIB拉上的所以这么写

    @property (nonatomic ,strong)UISearchController *searchC;//搜索控制器

    @property (nonatomic,strong)NSMutableArray *dataArray;//全部数据数组

    @property (nonatomic,strong)NSMutableArray *searchArray;//搜索结果数组

    @end

    @implementation YZJSearchVC

    //懒加载

    -(NSMutableArray *)dataArray

    {

    if (!_dataArray) {

    _dataArray = [[NSMutableArray alloc]init];

    }

    return _dataArray;

    }

    -(NSMutableArray *)searchArray

    {

    if (!_searchArray) {

    _searchArray = [[NSMutableArray alloc]init];

    }

    return _searchArray;

    }

    - (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view from its nib.

    [self setAppearanceView];

    }

    -(void)setAppearanceView{

    //添加搜索栏

    _searchC = [[UISearchController alloc]initWithSearchResultsController:nil];

    _searchC.searchBar.frame = CGRectMake(0, 0, 100, 50);

    //更新代理

    _searchC.searchResultsUpdater = self;

    //设置UISearchController的显示属性,以下3个属性默认为YES

    //搜索时,背景变暗色

    _searchC.dimsBackgroundDuringPresentation = NO;

    //搜索时,背景变模糊

    _searchC.obscuresBackgroundDuringPresentation = NO;

    // 点击搜索框时隐藏导航栏

    _searchC.hidesNavigationBarDuringPresentation = NO;

    _searchC.searchBar.placeholder=@"搜索产品、询价、报价信息";

    self.navigationItem.titleView=_searchC.searchBar;//搜索框放导航栏

    //tableView 是Xib拉上的所以这么写

    self.tableView.delegate=self;

    self.tableView.dataSource=self;

    self.tableView.separatorStyle=UITableViewCellSeparatorStyleNone;

    //假数据 热搜内容

    [self.dataArray addObject:@"断路器"];

    [self.dataArray addObject:@"端子"];

    [self.dataArray addObject:@"接线钳"];

    [self.dataArray addObject:@"变压器"];

    }

    #pragma mark tableView相关

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

    return 1;

    }

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

    //搜索框激活

    if (_searchC.active) {

    }

    return self.dataArray.count;

    }

    -(UIView*)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    //搜索框激活

    if (_searchC.active) {

    UIView *v=[UIView new];

    return v;

    }else{

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell==nil) {

    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];

    }

    cell.textLabel.text=@"热门搜索:";

    return cell;

    }

    }

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

    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];

    if (cell==nil) {

    cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"cell"];

    }

    //搜索框激活 有输入或者说 有搜索结果的时候 处理cell的形态

    if (_searchC.active) {

    }

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

    return cell;

    }

    -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{

    //搜索框激活 也就是有输入的时候

    if (_searchC.active) {

    //返回你处理数据的时候 cell应该有的高度

    }else{

    return 20;

    }

    }

    //只是为了添加 热门搜索这几个字作为头

    -(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{

    //搜索框激活 也就是有输入的时候

    if (_searchC.active) {

    return 0;

    }else{

    return 20;

    }

    }

    //搜索代理方法,搜索框获得第一响应或内容变化时触发

    -(void)updateSearchResultsForSearchController:(UISearchController *)searchController

    {

    //这里是搜索框每次点击就会调用可以进行搜索请求 然后更新页面

    //    [self.tableView reloadData];

    }

    实现后的效果图如下

    写的有不足的地方,大家可以留言给我。 简单运用 仅供参考!!!

    相关文章

      网友评论

          本文标题:UISearchController的运用

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