使用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];
}

 

效果如圖

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章