iOS8 UISearchViewController搜索功能讲解

在iOS8以前我们实现搜索功能需要用到UISearchbar和UISearchDisplayController, 在iOS8之后呢, UISearchController配合UITableView的使用相比之下简单很多,  需要签订两个代理协议UISearchControllerDelegate, UISearchResultsUpdating.还有一个很重要的属性self.searchVC.active,,返回的BOOL如果为yes,UITableView的数据源应该为搜索后的数组即resultArray,
否则为原始数组即self.dataArray-------需要在UITableView的代理方法里做判断.  运行效果图如下:

     

具体代码如下:

.h文件

//  ViewController.h

//  SearchForChinese

//  Created by Dong on 15/5/14.

//  Copyright (c) 2015年 xindong. All rights reserved.

#import <UIKit/UIKit.h>

#import "ChinesePinyin/ChineseSorting.h"

@interface ViewController :
UIViewController<UITableViewDelegate,
UITableViewDataSource, UISearchControllerDelegate,
UISearchResultsUpdating>

@property (nonatomic,
strong) UITableView *tableView;

@property (nonatomic,
strong) UISearchController *searchVC;

// 存放排好序的数据(汉字)

@property (nonatomic,
strong) NSMutableDictionary *sectionDictionary;

// 存放汉字拼音大写首字母

@property (nonatomic,
strong) NSArray *keyArray;

// 存放汉字(地名)

@property (nonatomic,
strong) NSMutableArray *dataArray;

@end

.m文件

//  ViewController.m

//  SearchForChinese

//  Created by Dong on 15/5/14.

//  Copyright (c) 2015年 xindong. All rights reserved.

#import "ViewController.h"

#define WIDTH [UIScreen mainScreen].bounds.size.width

#define HEIGHT [UIScreen mainScreen].bounds.size.height

@interface
ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

[super
viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

UILabel *label = [[UILabel
alloc] initWithFrame:CGRectMake(0, 0,
WIDTH, 64)];

label.backgroundColor = [UIColor
greenColor];

label.text =
@"\n搜搜";

label.numberOfLines = 0;

label.textAlignment =
NSTextAlignmentCenter;

[self.view
addSubview:label];

self.tableView = [[UITableView
alloc] initWithFrame:CGRectMake(0, 64,
WIDTH,
HEIGHT) style:UITableViewStyleGrouped];

self.tableView.backgroundColor = [UIColor
clearColor];

self.tableView.delegate =
self;

self.tableView.dataSource =
self;

[self.view
addSubview:self.tableView];

// UISearchController初始化

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

self.searchVC.searchResultsUpdater =
self;

self.searchVC.delegate =
self;

self.searchVC.searchBar.frame =
CGRectMake(0, 100, WIDTH, 44);

self.searchVC.searchBar.barTintColor = [UIColor
yellowColor];

self.tableView.tableHeaderView =
self.searchVC.searchBar;

//
设置为NO,可以点击搜索出来的内容

self.searchVC.dimsBackgroundDuringPresentation =
NO;

// 原始数据

self.dataArray = [NSMutableArray
arrayWithObjects:@"大兴",
@"丰台",
@"海淀",
@"朝阳",
@"东城",
@"崇文",
@"西城",
@"石景山",@"通州",
@"密云",
@"迪拜",
@"华仔",
@"三胖子",
@"大连", 
nil];

[self
customSortingOfChinese:self.dataArray];

}

/*

**

**********************调用排序方法 (本人自己封装的方法, 下载地址:https://github.com/Tbwas/ChineseCharacterSorting)

*

**/

- (void)customSortingOfChinese:(NSMutableArray *)array

{

//
获取汉字拼音首字母

self.keyArray = [[ChineseSorting
sharedInstance] firstCharcterSortingOfChinese:array];

//
将汉字排序

self.sectionDictionary = [NSMutableDictionary
dictionary];

self.sectionDictionary = [[ChineseSorting
sharedInstance] chineseCharacterSorting:array
KeyArray:self.keyArray];

}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

return
self.keyArray.count;

}

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

{

//
取每个section对应的数组

NSArray *arr = [self.sectionDictionary
objectForKey:self.keyArray[section]];

return arr.count;

}

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

{

static NSString *str =
@"cell";

UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:str];

if (!cell) {

cell = [[UITableViewCell
alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:str];

}

NSArray *arr = [self.sectionDictionary
objectForKey:self.keyArray[indexPath.section]];

cell.textLabel.text = arr[indexPath.row];

return cell;

}

// section的标题

-(NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section

{

return self.keyArray[section];

}

// 搜索界面将要出现

- (void)willPresentSearchController:(UISearchController *)searchController

{

NSLog(@"将要 
开始 
搜索时触发的方法");

}

// 搜索界面将要消失

-(void)willDismissSearchController:(UISearchController *)searchController

{

NSLog(@"将要 
取消 
搜索时触发的方法");

}

-(void)didDismissSearchController:(UISearchController *)searchController

{

[self
customSortingOfChinese:self.dataArray];

[self.tableView
reloadData];

}

#pragma mark -- 搜索方法

// 搜索时触发的方法

-(void)updateSearchResultsForSearchController:(UISearchController *)searchController

{

NSString *searchStr = [self.searchVC.searchBar
text];

//
谓词

NSPredicate *predicate = [NSPredicate
predicateWithFormat:@"SELF CONTAINS %@", searchStr];

//
过滤数据

NSMutableArray *resultDataArray = [NSMutableArray
arrayWithArray:[self.dataArray
filteredArrayUsingPredicate:predicate]];

//
调用地名排序的方法

[self
customSortingOfChinese:resultDataArray];

//
刷新列表

[self.tableView
reloadData];

}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath
*)indexPath

{

UIAlertView *arlertView = [[UIAlertView
alloc] initWithTitle:@"提示"
message:@"表点啦"
delegate:nil
cancelButtonTitle:nil
otherButtonTitles:@"听话",
nil];

[arlertView
show];

}

- (void)didReceiveMemoryWarning {

[super
didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

时间: 2024-11-10 01:00:42

iOS8 UISearchViewController搜索功能讲解的相关文章

iOS--- UITableView + UISearchDisplayController - - - - -实现搜索功能

iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社交,O2O还是在线教育等都会有一个搜索栏的实现,不过彼此实现效果是不一样的.iOS中的搜索栏实现起来相对简单一点,网上也有很多参考资料,不过靠谱的不是很多,很多都是iOS 8.0之前的实现,iOS 8.0上的实现貌似很少看到,可以运行,不过会看到searchDisplayController' is

ios UISearchDisplayController 实现 UITableView 搜索功能

UISearchDisplayController 是苹果专为 UITableView 搜索封装的一个类. 里面内置了一个 UITableView 用于显示搜索的结果.它可以和一个需要搜索功能的 controller 关联起来,其它的像原 TableView 和搜索结果 TableView 的切换, mask 的显示等等都 封装好了,使用起来非常非常的简单.特别是要实现全屏搜索时使用最多. 全屏搜索的意思是如果你用了  NavigationBar 当点击搜索框时 TableView 会自动弹上去

【转】为Android应用添加搜索功能

为Android应用添加搜索功能 为Android应用增加搜索功能:增加搜索建议

Yii 1开发日记 ----------- 搜索功能及Checkbox的实现

用yii 1实现后台的搜索功能,效果如下图: 1.模型中: 1 public function search() 2 { 3 4 $criteria = new CDbCriteria; 5 //独立高级搜索 6 if(isset( $_GET['goods']) ) { 7 //商品货号 8 if (isset($_GET['goods']['goods_sn']) && $_GET['goods']['goods_sn'] != "") 9 { 10 $criter

ILSpy搜索功能加强版

1.修改搜索功能,增加如下的额外搜索选项 A.按文本搜索(默认选项) B.按通配符搜索 C.按正则表达式搜索 2.搜索增加如下特性: A.可以按照名字空间检索特定名字空间下的所有类. B.修正了官方版本无法搜索泛型类型的功能. 警告: A.此版本为非官方版本. B.本软件为第三方修改软件,此软件的著作权及版权归原作者所有. C.原软件的任何版权声明及相关权益声明同样适用于本软件. 下载地址: https://onedrive.live.com/?cid=e0560144122a3b9d&id=E

ThinkPHP之中getlist方法实现数据搜索功能

自己在ThinkPHP之中的model之中书写getlist方法,其实所谓的搜索功能无非就是数据库查询之中用到的like  %string%,或者其他的 字段名=特定值,这些sql语句拼接在and语句之中: HTML之中: 1 <form action="" method="get"> 2 <table class="account_table" width="100%" cellpadding="

Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/12684155 前段时间因为换工作的缘故又恰巧碰到国庆节,所以有段时间自己没有更新博客了,过完国庆到新公司报道,感觉还不错,就是现在住的地方离新公司有点远,地铁20站,伤不起啊,我每天早上7点多就要起床,然后屁颠屁颠的去挤地铁上班,晚上下班还要挤地铁,先不说路程远,车费一天就要10几块,我的银子啊,有坐龙华线去上班的深圳程序员不?听说那条线上班高峰期很挤?我没在上班高峰期坐过那趟车,我

第四章:IOS Table表视图搜索功能UISearchBar

UISearchBar经常会跟UITable一齐使用,所以在此就介绍一下UISearchBar 先来看看结构 下面再看看它有哪些样式 基本搜索栏.里面????的Search文字用于提示用户??入查询关??字,搜索栏的Placeholder属性可以设置这个提示信息 带有??除按钮的搜索栏.在??入框中??入文字时,会在后面出现??????除按钮,点????除按钮可以??除??入框中的文字 带有查询结果按钮的搜索栏.显示最??搜索结果,显示设定如图4-31所示,选中 Options下的Shows S

iOS9系列专题二——全新的搜索功能api

更加智能的搜索方案--iOS9搜索功能新api 一.引言 iOS9中为我们提供了许多新的api,搜索功能的加强无疑是其中比较显眼的一个.首先,我们先设想一下:如果在你的app中定义一种标识符,在siri和搜索中,可以用过这个标识符搜索到你的app,是不是很棒?不,这还差得远,你可以定义任意的数据,使其在搜索和siri中可以快速检索到,这样的搜索功能是不是非常酷?不,还有更cool的,你甚至可以在你的网站中添加一些标志,使apple的爬虫可以检索到,那样,即使用户没有安装你的app,也可以在搜索中