使用UISearchBar实现搜索功能时,搜索栏高度不易调整,外观也不易做成自己想要的样式,又不想使用太复杂的方法,而使用UITextField可以实现这些功能又非常简便,所以使用UITextField是个不错的选择。
下面实现0-10000的数字搜索
1,在.h文件中实现UITableView的协议,用UITableView和UITextField共同实现搜索功能。
@interface ViewController : UIViewController < UITableViewDelegate, UITableViewDataSource>
2,定义全局变量,allNumberArr存储0-10000,filterNumberArr存储搜索过滤后的数组
@interface ViewController () { UITextField *searchTextField; NSMutableArray *allNumberArr; NSMutableArray *filterNumberArr; UITableView *searchTableView; }
3,初始化allNumberArr和filterNumberArr中的数据
- (void)initialAllNumber { allNumberArr = [[NSMutableArray alloc] init]; filterNumberArr = [[NSMutableArray alloc] init]; for (int i = 0; i <= 10000; i++) { NSString *numberStr = [[NSString alloc] initWithFormat:@"%d", i]; [allNumberArr addObject:numberStr]; [filterNumberArr addObject:numberStr]; } }
4,初始化UITalbeView,设置委托
//在willDidLoad中调用 - (UITableView *)createTableViewWithFrame:(CGRect)frame { UITableView *tableView = [[UITableView alloc] initWithFrame:frame]; tableView.delegate = self; tableView.dataSource = self; return tableView; }
5,创建UITextField搜索栏和搜索栏所在的View,调整View的外观,作为搜索栏的外观。调整起来比较容易。在View中加入UITextField,加入文本修改事件。search图标自己找的
- (UIView *)createSearchViewWithFrame:(CGRect)frame { UIView *view = [[UIView alloc] initWithFrame:frame]; view.layer.borderWidth = 1; view.layer.borderColor = [UIColor blueColor].CGColor; view.layer.cornerRadius = 20; return view; } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. [self initialAllNumber]; UIView *searchView = [self createSearchViewWithFrame:CGRectMake(50, 40, self.view.frame.size.width - 100, 40)]; [self.view addSubview:searchView]; searchTextField = [[UITextField alloc] initWithFrame:CGRectMake(15, 3, searchView.frame.size.width - 50, searchView.frame.size.height - 6)]; [searchTextField addTarget:self action:@selector(textFieldDidChange) forControlEvents:UIControlEventEditingChanged]; [searchView addSubview:searchTextField]; UIImageView *searchImgView = [[UIImageView alloc] initWithFrame:CGRectMake(searchView.frame.size.width - 40, 10, 20, 20)]; searchImgView.image = [UIImage imageNamed:@"search"]; [searchView addSubview:searchImgView]; }
6,编辑UITextField修改文本时的事件,当文本修改时,当allNumberArr中的数据包含searchTextField.text,将allNumberArr中的数据加入到filterNumberArr中,并刷新TableView.
- (void)textFieldDidChange { [filterNumberArr removeAllObjects]; for (int i = 0; i < allNumberArr.count; i++) { if ([allNumberArr[i] containsString:searchTextField.text]) { [filterNumberArr addObject:allNumberArr[i]]; } } [searchTableView reloadData]; }
7,实现UITalbeViewDelegate和UITalbeViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return filterNumberArr.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *identifier = @"cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier]; } cell.textLabel.text = filterNumberArr[indexPath.row]; return cell; }
实现结果为