UISearchBar和UITableView实现简单的模糊查询

来源:互联网 发布:浙江大学c语言视频 编辑:程序博客网 时间:2024/04/29 05:18

在UISearchBar的代理方法中有两个方法可以比较好的实现:

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText;//方法一

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text;//方法二

但是方法2有一个缺点,就是只有在点击键盘上的按钮时才会被调用,而点击汉字选择栏里面的汉字没有反应,方法一就不存在这个问题,所以我们这次选择方法一:

下面直接通过代码实现来观察

1.首先遵循协议

<UISearchBarDelegate,UITableViewDataSource,UITableViewDelegate>

2.定义属性

@property (strong,nonatomic) UITableView *myTableView;@property (strong,nonatomic) NSMutableArray *displayArray;//展示的数据@property (strong,nonatomic) NSArray *oldDataArray;//存放原始数据@property (strong,nonatomic) UISearchBar *mySearchBar;

3.在- (void)viewDidLoad添加控件和添加原始数据以及展示数据

- (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];}

4.实现UITableView上数据的现实(实现UITableViewDataSourceUITableViewDelegate的方法)

- (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]);}

5.实现方法一和模糊查询功能

- (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];}







0 0
原创粉丝点击