欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用UITextField实现搜索功能

程序员文章站 2022-07-15 19:06:37
...

    使用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;
}

 实现结果为


使用UITextField实现搜索功能
            
    
    博客分类: ios Objective-Cios 
 

相关标签: Objective-C ios