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