分组表+本地搜索 UISearchDisplayController  UISearchBar 的使用

效果图

@interface CityListViewController :UIViewController<UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate>

@property (nonatomic, retain) UITableView*mTableView;

@property (nonatomic, retain) NSArray*dataList;

@property (nonatomic, retain) NSArray*searchData;

@property (nonatomic, retain)NSMutableArray *allCitys;

@property (nonatomic, retain) UISearchBar*mSearchBar;

@property (nonatomic, retain)UISearchDisplayController *searchController;

@end

#import"CityListViewController.h"

#import "AppDelegate.h"

- (void)viewDidLoad

{

//初始化分组表

self.mTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 88,320, 480) style:UITableViewStyleGrouped];

self.mTableView.delegate = self;

self.mTableView.dataSource = self;

[self.mTableViewsetContentSize:CGSizeMake(320, 3000)];

//初始化搜索条

self.mSearchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 44, 320, 44)];

[self.mSearchBarsetBackgroundImage:[UIImage imageNamed:@"nav_bg.png"]];

[self.mSearchBar setPlaceholder:@"搜索城市"];

self.mSearchBar.delegate = self;

[self.mSearchBar sizeToFit];

//初始化UISearchDisplayController

self.searchController =[[UISearchDisplayController alloc] initWithSearchBar:self.mSearchBarcontentsController:self];

self.searchController.searchResultsDelegate= self;

self.searchController.searchResultsDataSource = self;

self.searchController.delegate = self;

//解析数据源文件

NSString *path = [[NSBundle mainBundle]pathForResource:@"Provineces" ofType:@"plist"];

self.dataList = [NSMutableArrayarrayWithContentsOfFile:path];

//确定每个分组的行数

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

{

if([tableViewisEqual:self.searchController.searchResultsTableView]){

NSLog(@"searchData count is%d",[self.searchData count]);

return [self.searchData count];

}

else{

NSDictionary *dic = [self.dataListobjectAtIndex:section];

NSArray *cityCount = [dicobjectForKey:@"Citys"];

int count = (int)[cityCount count];

for(int i = 0;i<count-1;i++){

NSDictionary *d = [cityCountobjectAtIndex:i];

NSString *Name = [dobjectForKey:@"C_Name"];

[self.allCitys addObject:Name];

}

return [cityCount count];

}

}

//分组的个数

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

{

if([tableViewisEqual:self.searchController.searchResultsTableView])

return 1;

else

return [self.dataList count];

}

//每个分组的Header

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

{

NSString *HeaderName;

if([tableViewisEqual:self.searchController.searchResultsTableView]){

HeaderName = @"搜索结果";

}else{

NSDictionary *dict = [self.dataListobjectAtIndex:section];

HeaderName = [dictobjectForKey:@"p_Name"];

return HeaderName;

}

return HeaderName;

}

#pragma mark - UISearchDisplayControllerdelegate methods

-(void)filterContentForSearchText:(NSString*)searchText                              scope:(NSString*)scope {

NSMutableArray *searchResult =[[NSMutableArray alloc] initWithCapacity:0];

int j =(int)  [self.allCitys count];

for (int i = 0; i<j-1; i++) {

NSString *str = [self.allCitysobjectAtIndex:i];

if([strrangeOfString:searchText].location != NSNotFound )

{

[searchResult addObject:str];

}

}

self.searchData = [NSArrayarrayWithArray:searchResult];

[searchResult release];

}

-(BOOL)searchDisplayController:(UISearchDisplayController*)controller shouldReloadTableForSearchString:(NSString *)searchString {

[selffilterContentForSearchText:searchString

scope:[[self.searchDisplayController.searchBar scopeButtonTitles]                                      objectAtIndex:[self.searchDisplayController.searchBar                                                     selectedScopeButtonIndex]]];

return YES;

}

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {

[selffilterContentForSearchText:[self.searchDisplayController.searchBar text]                                scope:[[self.searchDisplayController.searchBar scopeButtonTitles]                                      objectAtIndex:searchOption]];

return YES;

}

//tableView cell刷新数据

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

{

static NSString *cellName =@"cellName";

UITableViewCell *cell = [tableViewdequeueReusableCellWithIdentifier:cellName];

if(cell == nil)

{

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

}

if([tableViewisEqual:self.searchController.searchResultsTableView]){

cell.textLabel.text = [self.searchDataobjectAtIndex:indexPath.row];

}else{

NSDictionary *dict = [self.dataListobjectAtIndex:[indexPath section]];

NSArray *shengfen = [dictobjectForKey:@"Citys"];

NSDictionary *citys = [shengfenobjectAtIndex:indexPath.row];

NSString *Name = [citysobjectForKey:@"C_Name"];

cell.textLabel.text = Name;

//[self.allCitys addObject:Name];

}

return cell;

}

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

{

if([tableViewisEqual:self.searchController.searchResultsTableView]){

self.cityName = [self.searchDataobjectAtIndex:indexPath.row];

((AppDelegate *)[[UIApplicationsharedApplication]delegate]).APPDelegateCityName = self.cityName;

}else{

self.cityName = [[[[self.dataListobjectAtIndex:indexPath.section] objectForKey:@"Citys"]objectAtIndex:indexPath.row] objectForKey:@"C_Name"];

((AppDelegate *)[[UIApplicationsharedApplication]delegate]).APPDelegateCityName = self.cityName;

}

[self.navigationControllerpopToRootViewControllerAnimated:YES];

}

UISearchDisplayController UISearchBar的更多相关文章

  1. iOS中的两种搜索方式UISearchDisplayController和UISearchController

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 以前iOS的搜索一般都使用UISearchDisplayCon ...

  2. iOS - UISearchController

    前言 NS_CLASS_DEPRECATED_IOS(3_0, 8_0, "UISearchDisplayController has been replaced with UISearch ...

  3. iOS - UITableViewController

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITableView : UIScrollView <NSCoding> @available(iOS ...

  4. UISearchBar和 UISearchDisplayController的使用

    感觉好多文章不是很全面,所以本文收集整合了网上的几篇文章,感觉有互相补充的效果. 如果想下载源码来看:http://code4app.com/search/searchbar .本源码与本文无关 1. ...

  5. 如何在UINavigationBar上添加UISearchBar以及UISearchDisplayController的使用 --OC --iOS

    那我们开始吧,下面是Sely写的一个Demo,分享给大家. 新建一个项目, UISearchDisplayController 的 displaysSearchBarInNavigationBar太死 ...

  6. UISearchBar和UISearchDisplayController

    原文 http://hi.baidu.com/happywilma0118/item/e6d5730a499bba1b3a53eef8 UISearchBar继承自UIView.UIResponder ...

  7. UI UISearchBar UISearchDisplayController实现搜索条、解析颜色

    本文转载至 http://blog.sina.com.cn/s/blog_bf2d33bd01017q6l.html @interface ThirdViewController : UIViewCo ...

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

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

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

    iOS中UISearchDisplayController用于搜索,搜索栏的重要性我们就不说了,狼厂就是靠搜索起家的,现在越来越像一匹没有节操的狼,UC浏览器搜索栏现在默认自家的神马搜索,现在不管是社 ...

随机推荐

  1. [置顶] Spring中DI设置器注入

    Java的反射机制可以说是在Spring中发挥的淋漓尽致,下面要看的代码就是通过反射机制来实现向一个类注入其实际依赖的类型,这个过程的实现会交由Spring容器来帮我们完成. JavaBean中针对属 ...

  2. linux_Ubuntu 12.04 安装jdk

    1.下载jdk6jdk6下载地址为:http://download.java.net/jdk6/,根据操作系统的选择对应的安装包,我的是ubuntu 12.04 32bit的,所以下载的文件是jdk- ...

  3. firefox里面title乱码

    原文:firefox里面title乱码 昨天 在notepad++里面写得文档里面title里面有中文,即使在文档里面写有charset=’UTF-8’, 但是保存后在firefox运行,浏览器标签标 ...

  4. linux虚拟文件系统2

    转自:http://rstevens.iteye.com/blog/849413 一.概述 Linux 文件系统是相当复杂的,本文只分析虚拟文件系统的实现,对具体的文件系统不涉及. 即使是虚拟文件系统 ...

  5. Asp.net MVC + EF + Spring.Net 项目实践(三)

    这一篇要整合Model层和Repository层,提供一个统一的操作entity的接口层,代码下载地址(博客园上传不了10M以上的文件,所以用了百度):http://pan.baidu.com/s/1 ...

  6. C#5.0新特性

    C#5.0新特性 C#5.0最大的新特性,莫过于Async和Parallel. 以往我们为了让用户界面保持相应,我们可以直接使用异步委托或是System.Threading命名空间中的成员,但Syst ...

  7. js checkbox多选值采集

    var objs = document.getElementsByTagName("input"); for (var i = 0; i < objs.length; i++ ...

  8. PHP的MySQL扩张:MySQL数据库概述

    资源:http://www.ido321.com/1023.html 一.SQL:结构化查询语言 SQL(Structured Query Language)是高级的非过程化变成语言.专门用于查询和改 ...

  9. 【Eclipse提高开发速度-插件篇】Eclipse插件安装慢得几个原因

    1.改动"Available Softeware Site" ,降低关联,详细做法 Install New Software >> Available Softewar ...

  10. 74LS183 加法器 【数字电路】

    74LS183 搭的一个还有点意思的加法电路,串行进位的 2+6 == 8 大家都懂的哈哈