该程序实现了1到10000之间的数字搜索
1,声明UISearchBar和UITableView的委托
@interface ViewController : UIViewController
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]; }