zoukankan      html  css  js  c++  java
  • UISearchController的使用。(iOS8+)

    这种方法早就发现了,不过一致没用,今天拿过来用,发现了一些问题。

    1、这个东西和表视图结合使用很方便,首先,创建新的工程,将表视图控制器作为工程的根视图,并且添加一个导航(当然,你可以不这样做,但是你的搜索控制器要和表视图结合使用)

    2、@interface TableViewController ()<UISearchControllerDelegate,UISearchResultsUpdating>,这里是要用的两个代理,

    3、

    @property(nonatomic,strong)NSArray *content;//在这里存放的是你的数据

    @property(nonatomic,strong)NSArray *searchResult;//这个是搜索出来的结果

    @property(nonatomic,strong)UISearchController *searchController;

    4、在这里进行代理的设置以及一些属性(是叫属性吧)的初始化操作,,,,注意的是,搜索控制器的初始化放在代理的设置之前。

    - (void)viewDidLoad {

        [super viewDidLoad];

        self.content = @[@"beijing",

                         @"shanghai",

                         @"guanghzou",

                         @"shenzhen",

                         @"huhuhu"

                         ];

            self.searchResult = @[];

          self.searchController = [[UISearchController alloc]initWithSearchResultsController:nil];

        self.searchController.searchResultsUpdater = self;

        self.searchController.delegate = self;

      [self.searchController.searchBar sizeToFit];

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

    }

    5、这里是代理方法的实现(只有这个是必须实现的,就是这个刷新了,这个方法的触发事件是什么)

    #pragma mark UISearchResultsUpdating

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

        

        if (searchController.searchBar.text.length>0) {

            self.searchResult = [self searchByText:searchController.searchBar.text];

        }else{

            self.searchResult = self.content;

        }

        

        [self.tableView reloadData];

        

    }

    //将搜索到的结果放到一个数组中返回,这里是搜索结果的判断

    -(NSArray *)searchByText:(NSString *)text{

        NSMutableArray *result = [NSMutableArray array];

        for (NSString *str in self.content) {//遍历你存放所有数据的数组

            if ([[str lowercaseString]rangeOfString:[text lowercaseString]].location != NSNotFound) {//这个方法头一回使用,这个跟NSPredicate有什么区别

                [result addObject:str];

            }

        }

        return result;

    }

     6、然后就是表视图的3问1答了

    #pragma mark - Table view data source

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

       

        return 1;

    }

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

        if (self.searchController.active) {//这里可以根据搜索控制器是不是激活状态来返回不同的数值,如果是搜索状态,表视图就返回搜索结果的个数个行,如果不在搜索的状态,就返回所有结果的个数

            return self.searchResult.count;

        }else{

            return self.content.count;

        }

    }

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

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

        if (self.searchController.active) {//这里的逻辑同返回行数

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

         }else{

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

        }

        

        

        return cell;

    }

    另外,我该怎么实现对搜索结果的点击事件呢。

     self.searchController.dimsBackgroundDuringPresentation = NO;

    这样搜索的结果就可以点击了,(补充2015-9-22)

  • 相关阅读:
    关于sqlserver2008 bcp根据数据表导出xml格式文件的小记
    关于SQL SERVER 2008 X64版本报错:消息 7302,级别 16,无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的实例。
    Response.Redirect(),Server.Transfer(),Server.Execute()的区别[转]
    ASP.net应用程序中如何调用客户端的Javascript脚本小结(转)
    重写ListView控件,实现点击列头排序的功能
    关于Response.redirect和Response.End出现线程中止异常的处理(转)
    持续集成cruisecontrol.net学习总结
    [转]关于PowerDesigner反向工程SQL Server2000数据库时生成注释的解决方法
    敏捷开发scrum学习笔记一
    asp.net缓存机制总结(转)
  • 原文地址:https://www.cnblogs.com/mudy/p/4816604.html
Copyright © 2011-2022 走看看