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

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)

UISearchController的使用。(iOS8+)的更多相关文章

  1. iOS之搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)

    在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ...

  2. 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UISearchDisplayController)

    1.searchResultsUpdater:设置显示搜索结果的控制器 ? 1     _mySearchController.searchResultsUpdater = self; 2.dimsB ...

  3. iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)

    在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ...

  4. UISearchController

    搜索框UISearchController的使用(iOS8.0以后替代UISearchBar + UIS) 1.在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便 ...

  5. iOS8以后 UISearchController的用法

    查了不少资料,都不太全,自己查看了apple文档,写了一份代码: 如下(只是界面): 1. 声明属性 @property (nonatomic, strong) UISearchController ...

  6. UISearchController使用

    iOS8之前我们使用UISearchDisplayController做TableView的本地搜索 iOS8提供实现搜索功能的SDK:UISearchController(iOS8.0之后).UIS ...

  7. iOS原生的搜索:UISearchController

    iOS8之前我们使用UISearchDisplayController做TableView的本地搜索,查看UIKit库,苹果已经使用新控件取代它. NS_CLASS_DEPRECATED_IOS(3_ ...

  8. iOS8的一些控件的变更---备用

    UISearchDisplayController变更为UISearchController UIAlertView变更为UIAlertController 如果添加点击事件则需要使用UIAlertC ...

  9. iOS UISearchBar UISearchController

    搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是 ...

随机推荐

  1. 单机c/s软件如何让老板在异地看销售营业报表

    单机软件,让人的感觉就只能在本地使用. 单机版c/s软件,数据存放在本机上,老板想要查看销售报表的话,需要跑到公司的那台电脑上才能查看,这对于在外面四处跑业务的老板来说,基本上是不可能做到的.但每天的 ...

  2. 5A的肖特基二极管 SK5x / SK5xx

    5A的肖特基 管压降经实测2A/0.3V, SK5x 和SK5xx别在于前者是四位命名,后者是一个五位命名带B, 封装不一样,参数基本一致.不细看手册容易用错了. 四位命名:封装为SMC (DO-21 ...

  3. Java远程方法调用(RMI)

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

  4. IEnumerable、IEnumerator与yield的学习

    我们知道数组对象可以使用foreach迭代进行遍历,同时我们发现类ArrayList和List也可以使用foreach进行迭代.如果我们自己编写的类也需要使用foreach进行迭代时该怎么办呢? IE ...

  5. maven依赖传递关系

    一.maven 依赖传递规则 举个例子,比如A依赖B,B依赖C,那么A也是依赖C的.A是对B的直接依赖,A对C是传递依赖 ①.最短路劲原则 如,路劲一:A依赖B,B依赖C,C依赖D(1.0.0): 路 ...

  6. String的那点小事儿

    1.== 比较的是什么? 1 package xupengwei.string; 2 /** 3 * @describe: 4 * @author chenmo-xpw 5 * @version 20 ...

  7. Redis实战之征服 Redis + Jedis + Spring (三)

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现“stringRedisTemplate.opsForList()”的强大,抓紧时间恶补下. 通过spring-data-redis完 ...

  8. 升级到tomcat7.0碰到的问题

    今天把tomcat从6.0.18升级到7.0.25,发现了两个问题 问题1 java.lang.ClassNotFoundException: org.apache.catalina.mbeans.S ...

  9. 从零开始学android开发-IDE空间不够报错

    E:\ProSoft\adt-bundle-windows-x86-20140321\eclipse目录下 右键eclipse用记事本打开 可以设置运行的最大的运行空间

  10. ZOJ 3822 Domination 期望dp

    Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...