博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UISearchController的使用。(iOS8+)
阅读量:5347 次
发布时间:2019-06-15

本文共 2559 字,大约阅读时间需要 8 分钟。

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

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)

转载于:https://www.cnblogs.com/mudy/p/4816604.html

你可能感兴趣的文章
apache 启动不了的排查方法
查看>>
Java有没有goto?
查看>>
(转)makefile 的用法
查看>>
Python(八)进程、线程、协程篇
查看>>
金山试题
查看>>
Single Number and Single Number II
查看>>
Neutron Messaging Callback System
查看>>
PageAdmin、WordPress与dedeCMS网站模板制作总结
查看>>
Lambda表达式
查看>>
【集训队作业2018】【XSY3372】取石子 DP
查看>>
Mysql设置字段唯一,值唯一方式
查看>>
python加载包
查看>>
elf逆向入门
查看>>
UDPwireshark能抓到包,程序接收不到的解决方法
查看>>
Linux编程基础——Socket编程
查看>>
(hdu)5546 Ancient Go
查看>>
[label][翻译][JavaScript]如何使用JavaScript操纵radio和check boxes
查看>>
HDU_1257
查看>>
笔记本的拆卸
查看>>
Uva 11354 LCA 倍增祖先
查看>>