使用UISearchBar和UITableView实现搜索功能

     该程序实现了1到10000之间的数字搜索

1,声明UISearchBar和UITableView的委托

@interface ViewController : UIViewController <UISearchBarDelegate, UITableViewDelegate, UITableViewDataSource>

 2,声明全局变量

@interface ViewController () {
    NSMutableArray *dataArr;
   
    NSMutableArray *filterDataArr;
   
    UITableView *numberTableView;
    
    UISearchBar *numberSearchBar;
}

dataArr : 存储所有要搜索的数据,1-10000

filterDataArr : 存储搜索到的数据

3,初始化数据,将1-10000存储到dataArr和filterDataArr中

    filterDataArr = [[NSMutableArray alloc] init];
    dataArr = [[NSMutableArray alloc] init];
    
    for (int i = 0; i < 10000; i++) {
        [dataArr addObject:[[NSString alloc] initWithFormat:@"%d", i]];
        [filterDataArr addObject:dataArr[i]];
    }

 4,初始化UITableView

    numberTableView = [[UITableView alloc] initWithFrame:CGRectMake(0, numberSearchBar.frame.origin.y + numberSearchBar.frame.size.height, self.view.frame.size.width, self.view.frame.size.height - 80)];
    numberTableView.delegate = self;   
    numberTableView.dataSource = self;
    [self.view addSubview:numberTableView];

 5,初始化UISearchBar

    numberSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(40, 40, self.view.frame.size.width - 80, 40)];
    numberSearchBar.delegate = self;
    numberSearchBar.barStyle = UIBarStyleBlack;   //黑色风格  默认是白色
    numberSearchBar.barTintColor = [UIColor whiteColor];   //搜索框外背景变为百色
    [self.view addSubview:numberSearchBar];

 6,实现UISearchBar委托

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
    [filterDataArr removeAllObjects];    过去数据全部消除
    
    for (int i = 0; i < dataArr.count; i++) {
        if ([dataArr[i] containsString:numberSearchBar.text]) {
            [filterDataArr addObject:dataArr[i]];
        }
    }
    
    [numberTableView reloadData];    //重置TableView
}

 7,实现UITableViewDelegate和UITableViewDataSource

//返回tableView的行数
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return filterDataArr.count;
}

 

//搜索的数字显示在tableView每一行
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *identifier = @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
    }
    else{
        // 删除cell中的子对象,解决覆盖问题。
        while ([cell.contentView.subviews lastObject] != nil) {
            [(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];
        }
    }

    if (filterDataArr.count == 0) {
        cell.textLabel.text = @"";
    }
    else {
        cell.textLabel.text = filterDataArr[indexPath.row];
    }
    
    return cell;
    
}

 

//每行高度为42
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 42;
}

 

//tableView的点击效果
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

 

效果如图

 

猜你喜欢

转载自2914905399.iteye.com/blog/2310179
今日推荐