IOS-模糊搜索UISearchBar+UISearchDisplayController
不废话上代码 想学的跟着写一遍 注释很全了。
只是实现了简单 搜索,其他都没有做处理
//
// RootViewController.m
// SearchTable
//
// Created by ALei on 14-8-22.
// Copyright (c) 2014年 MinjieShou. All rights reserved.
//
#import "RootViewController.h"
@interface RootViewController ()<UITableViewDataSource,UITableViewDelegate,UISearchDisplayDelegate,UISearchBarDelegate>
@property (nonatomic,strong)NSArray *dataArr;//数据源
@property (nonatomic,strong)NSArray *resultsArr;//搜索结果
@property (nonatomic,strong)UISearchBar *search;
@property (nonatomic,strong)UISearchDisplayController * searchPlay;
@property (nonatomic,strong)UITableView *aTableView;
@end
@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [superinitWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[superviewDidLoad];
self.title =@"搜索";
_dataArr = [[NSArrayalloc] initWithObjects:@"aaa",@"abc",@"aqq",@"bdc",@"gcd",@"mnb",@"zzz",nil];
[selfcreateView];
// Do any additional setup after loading the view.
}
- (void) createView
{
_aTableView = [[UITableViewalloc] initWithFrame:CGRectMake(0,0, 320,480)];
_aTableView.delegate =self;
_aTableView.dataSource =self;
[self.viewaddSubview:_aTableView];
}
#pragma mark -
#pragma mark UITableViewDelegate
-(UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
_search = [[UISearchBaralloc] initWithFrame:CGRectMake(0,0, 320,40)];
_search.backgroundColor = [UIColorredColor];
_search.delegate =self;
_search.showsCancelButton =YES;
_search.keyboardType =UIKeyboardTypeDefault;
_searchPlay = [[UISearchDisplayControlleralloc] initWithSearchBar:self.searchcontentsController:self];
_searchPlay.delegate =self;
_searchPlay.searchResultsDataSource =self;
_searchPlay.searchResultsDelegate =self;
_searchPlay.active =NO;
return_searchPlay.searchBar;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
NSLog(@"取消");
return YES;
}
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return tableView ==self.searchPlay.searchResultsTableView?0 :40;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
NSInteger row = 0;
if ([tableViewisEqual:self.searchPlay.searchResultsTableView]) {
row = [self.resultsArrcount];
}else{
row = [self.dataArrcount];
}
return row;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier =@"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCellalloc] initWithStyle:UITableViewCellStyleDefaultreuseIdentifier:CellIdentifier];
}
if ([tableViewisEqual:self.searchPlay.searchResultsTableView]) {
cell.textLabel.text = [self.resultsArrobjectAtIndex:indexPath.row];
}else{
cell.textLabel.text = [self.dataArrobjectAtIndex:indexPath.row];
}
return cell;
}
#pragma mark -
#pragma mark UISearchDisplayControllerDelegate
//text是输入的文本,scope是搜索范围
- (void) searchText:(NSString *)text andWithScope:(NSString *)scope
{
//CONTAINS是字符串比较操作符,
NSPredicate *result = [NSPredicatepredicateWithFormat:@"SELF contains[cd] %@",text];
self.resultsArr = [self.dataArrfilteredArrayUsingPredicate:result];
}
- (BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
// searchString 是输入的文本
//返回结果数据读取搜索范围 在选择范围
NSArray *searScope = [self.searchPlay.searchBarscopeButtonTitles]; //数组范围
[selfsearchText:searchString andWithScope:[searScopeobjectAtIndex:[self.searchPlay.searchBarselectedScopeButtonIndex]]];
return YES;
}
- (BOOL) searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption
{
NSString *inputText = self.searchPlay.searchBar.text;//搜索输入的文本
NSArray *searScope = [self.searchPlay.searchBarscopeButtonTitles]; //索索范围
[selfsearchText:inputText andWithScope:[searScope objectAtIndex:searchOption]];
return YES;
}
@end
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。