在UISearchBar的代理方法中有两个方法可以比较好的实现:
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;//方法一
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;//方法二
但是方法2有一个缺点,就是只有在点击键盘上的按钮时才会被调用,而点击汉字选择栏里面的汉字没有反应,方法一就不存在这个问题,所以我们这次选择方法一:
下面直接通过代码实现来观察
1.首先遵循协议
<UISearchBarDelegate,UITableViewDataSource,UITableViewDelegate>
@property (strong,nonatomic) UITableView *myTableView; @property (strong,nonatomic) NSMutableArray *displayArray;//展示的数据 @property (strong,nonatomic) NSArray *oldDataArray;//存放原始数据 @property (strong,nonatomic) UISearchBar *mySearchBar;
- (void)viewDidLoad { [super viewDidLoad]; self.oldDataArray=@[@"大中国的中国人",@"一本大书",@"五子棋",@"百年中国在东方",@"猴子上树偷桃子",@"老虎上山吃鸡",@"小马过河没淹死",@"今年回家过年",@"小南回来了",@"我还是我",@"不一样的烟火",@"今天下雪了",@"下雪了路很滑",@"国家图书馆在北京",@"在上班",@"请不要打扰我",@"你叫什么名字",@"保尔咔嚓金",@"很不错的天气",@"大妈在路上",@"我要过马路",@"今天星期几",@"小孩都上学",@"林黛玉与薛宝钗"]; self.displayArray=[[NSMutableArray alloc]initWithArray:self.oldDataArray]; self.mySearchBar=[[UISearchBar alloc]initWithFrame:CGRectMake(0, 20, 320, 50)]; self.mySearchBar.delegate=self; [self.view addSubview:self.mySearchBar]; self.myTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 70, 320, self.view.frame.size.height-70)style:UITableViewStyleGrouped]; self.myTableView.dataSource = self; self.myTableView.delegate = self; self.myTableView.separatorInset = UIEdgeInsetsMake(0, 0, 0, 0); [self.view addSubview:self.myTableView]; }
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.displayArray.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 40; } -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *Identifier = @"Mycell"; UITableViewCell * cell = [tableView dequeueReusableHeaderFooterViewWithIdentifier:Identifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:nil]; } cell.selectionStyle = UITableViewCellSelectionStyleNone; if (self.displayArray.count == 0) { return cell; } cell.textLabel.text=self.displayArray[indexPath.row]; return cell; } -(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { NSLog(@"您选中的为:%@",self.displayArray[indexPath.row]); }
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { NSLog(@"查询的参数====%@",searchText); [self searchFromTalbeView:searchText]; } - (void)searchFromTalbeView:(NSString *)text { NSString *searchText=text; if (searchText.length>0) { [self.displayArray removeAllObjects]; for (NSString *tempStr in self.oldDataArray) { NSRange titleResult=[tempStr rangeOfString:searchText options:NSCaseInsensitiveSearch]; if (titleResult.length>0) { [self.displayArray addObject:tempStr]; } } } else { self.displayArray=[self.oldDataArray mutableCopy]; } [self.myTableView reloadData]; }