该程序实现了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];
}
效果如图