UISearchDisplayController

原创 2015年07月10日 09:47:19
#import <UIKit/UIKit.h>

@interface MainViewController : UITableViewController{
   
NSArray *data;
   
NSArray *filterData;
   
UISearchDisplayController *searchDisplayController;
}

@end



- (void)viewDidLoad
{
    [
super viewDidLoad];
   
UISearchBar *searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width
                                                                           ,
44)];
    searchBar.
placeholder = @"搜索";
   
   
// 添加 searchbar headerview
   
self.tableView.tableHeaderView = searchBar;
   
   
// searchbar 初始化 SearchDisplayController
   
// 并把 searchDisplayController 和当前 controller 关联起来
   
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
   
   
// searchResultsDataSource 就是 UITableViewDataSource
   
searchDisplayController.searchResultsDataSource = self;
   
// searchResultsDelegate 就是 UITableViewDelegate
   
searchDisplayController.searchResultsDelegate = self;
}

- (
void)didReceiveMemoryWarning
{
    [
super didReceiveMemoryWarning];
}

#pragma mark - Table view data source

- (
NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
   
return 1;
}

/*
 *
如果原 TableView SearchDisplayController 中的 TableView delete 指向同一个对象
 *
需要在回调中区分出当前是哪个 TableView
 */

- (
NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   
if (tableView == self.tableView) {
       
return data.count;
    }
else{
       
// 谓词搜索
       
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"self contains [cd] %@",searchDisplayController.searchBar.text];
       
filterData =  [[NSArray alloc] initWithArray:[data filteredArrayUsingPredicate:predicate]];
       
return filterData.count;
    }
}

- (
UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
   
static NSString *cellId = @"mycell";
   
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId];
   
   
if (cell == nil) {
        cell = [[
UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellId];
    }
   
   
if (tableView == self.tableView) {
        cell.
textLabel.text = data[indexPath.row];
    }
else{
        cell.
textLabel.text = filterData[indexPath.row];
    }
   
   
return cell;
}

-(
void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
   
NSString *text;
   
   
if (tableView == self.tableView) {
        text =
data[indexPath.row];
    }
else{
        text =
filterData[indexPath.row];
    }
   
   
NSLog(@"you click %d   %@",indexPath.row,text);
}

@end
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于UISearchDisplayController的一些使用经验分享

1.  UISearchDisplayController.searchResultsTableView 的frame指定只有在didShowSearchResultsTableView委托调用之后,...
  • ys410900345
  • ys410900345
  • 2015年01月20日 19:58
  • 6167

UISearchController替换UISearchDisplayController

随着iOS 的升级,iOS 7的占有率更低了。Xcode 升级到Xcode 8之后,对iOS 应用支持的最低版本,iOS 7也被抛弃了。我在新项目中也是最低支持到iOS 8,因此工程里也是各种警告。首...
  • u011619283
  • u011619283
  • 2016年09月30日 14:53
  • 1850

UISearchDisplayController点击搜索时屏幕顶部出现黑条问题的解决方案

先来看看问题现象,如下图,就是屏幕顶部状态栏的黑色横条: 产生原因:由于UINavigationController 的背景颜色是黑色的,当UISearchBar获取焦点后UISearchDisp...
  • u010828718
  • u010828718
  • 2016年01月11日 13:45
  • 911

UISearchDisplayController UISearchBar

分组表+本地搜索 UISearchDisplayController  UISearchBar 的使用 效果图 @interface CityListViewController ...
  • jjaze3344
  • jjaze3344
  • 2013年07月29日 09:36
  • 11343

UI - UISearchController&UISearchDisplayController

系统自带的搜索页面类 --- UISearchDisplayController和UISearchController详细的使用方法,, 让你更方便快捷的进行搜索功能开发....
  • wangyanchang21
  • wangyanchang21
  • 2016年09月16日 14:36
  • 831

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

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

UISearchDisplayController详解

在之前做过的应用中,很多都有“搜索”这个功能,大部分情况下我都是只采用UISearchBar并结合UItableView来展示搜索结果,其 实IOS SDK中已经有自带的控件能帮助我们做好这些事,...
  • awaylin113
  • awaylin113
  • 2014年09月27日 10:06
  • 1049

点击搜索取消UISearchDisplayController的搜索状态

一般,我们用到UISearchDisplayController的时候,都是需要对一个数据源进行刷选,在UISearchDisplayController自带的tableView中展示出来,然后点击退...
  • humingtao2013
  • humingtao2013
  • 2014年06月14日 21:00
  • 3523

iOS UITableView 隐藏多余分割线

在iOS表视图中UITableView如果数据未满屏,多余的分割线依然存在 解决方法很简单 let footerView = UIView(frame: CGRectZero) ...
  • chengkaizone
  • chengkaizone
  • 2016年01月13日 14:34
  • 469

UISearchDisplayController索引栏背景透明

if ([_tableView respondsToSelector:@selector(setSectionIndexColor:)]) {         _tableView.section...
  • zzzili
  • zzzili
  • 2016年04月06日 15:56
  • 381
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UISearchDisplayController
举报原因:
原因补充:

(最多只允许输入30个字)