#import
<UIKit/UIKit.h>
@interface MainViewController : UITableViewController {
NSArray *data;
NSArray *filterData;
UISearchDisplayController *searchDisplayController;
}
@end
@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
{
[ 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