Use UISearchBar and UITableView to implement search function

     The program implements a number search between 1 and 10000

 

1, declare the delegate of UISearchBar and UITableView

 

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

 2, declare global variables

 

 

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

dataArr : store all the data to be searched, 1-10000

filterDataArr : store the searched data

3, initialize the data, store 1-10000 into dataArr and 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, initialize 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, initialize UISearchBar

    numberSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(40, 40, self.view.frame.size.width - 80, 40)];
    numberSearchBar.delegate = self;
    numberSearchBar.barStyle = UIBarStyleBlack; //The default black style is white
    numberSearchBar.barTintColor = [UIColor whiteColor]; //The background outside the search box becomes a hundred colors
    [self.view addSubview:numberSearchBar];

 6, implement UISearchBar delegate

- (void) searchBar: (UISearchBar *) searchBar textDidChange: (NSString *) searchText {
    [filterDataArr removeAllObjects]; All past data is removed
    
    for (int i = 0; i < dataArr.count; i++) {
        if ([dataArr[i] containsString:numberSearchBar.text]) {
            [filterDataArr addObject:dataArr[i]];
        }
    }
    
    [numberTableView reloadData];    //重置TableView
}

 7. Implement UITableViewDelegate and UITableViewDataSource

//return the number of rows in tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return filterDataArr.count;
}

 

//The searched numbers are displayed in each row of the 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{
        // Delete the child objects in the cell to solve the coverage problem.
        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;
    
}

 

//The height of each row is 42
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return 42;
}

 

//click effect of tableView
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}

 

The effect is as shown in the figure

 

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326677758&siteId=291194637