搜索框

#import "RootViewController.h"

//编辑搜索框需要遵守两个协议:

//UISearchResultsUpdating: 搜索到数据时的触发

//UISearchControllerDelegate:搜索的格式的触发

@interfaceRootViewController ()

{

    UITableView *_tabView;

    NSMutableArray *_dataArray;    //存储未搜索的数据


    UISearchController *_search;  //搜索控制器的对象声明


    NSMutableArray *_resultArray;  //存储搜索时的数据


    BOOL_isSearch;        //判断是否进行搜索的开关

                           //YES, 显示搜索时的数据

                           //NO,显示未搜索的数据

}

@end

@implementationRootViewController

- (void)viewDidLoad {

    [superviewDidLoad];

    // Do any additional setup after loading the view.


    _tabView = [[UITableView alloc] initWithFrame:self.view.bounds];

    _tabView.dataSource =self;

    _tabView.delegate  =self;

    [self.view addSubview:_tabView];



    _dataArray = [[NSMutableArray alloc] init];

    for(inti=0;i<30;i++)

    {

        if(i%2){

            [_dataArray addObject:[NSString stringWithFormat:@"基友%d",i]];

        }else{

            [_dataArray addObject:[NSString stringWithFormat:@"闺蜜%d",i]];

        }

    }


    [selfcreateSeachControl];  //创建搜索控制器


}

-(void)createSeachControl

{

    //实例化搜索控制器对象,nil代表在当前类中使用

    _search = [[UISearchController alloc] initWithSearchResultsController:nil];

    //是否在搜索的时候使底色变暗

    _search.dimsBackgroundDuringPresentation =YES;

    //设置两个代理对象

    _search.delegate =self; //--UISearchControllerDelegate的代理

    _search.searchResultsUpdater =self;


    //UISearchBar---用于设置搜索控制器的属性

    //UIView根据自己的内容来变化Frame的大小

    [_search.searchBar sizeToFit];

    //设置搜索框提示文字

    _search.searchBar.placeholder =@"请输入文字";

    //设置搜索框的颜色

    _search.searchBar.barTintColor = [UIColor redColor];


    //搜索控制器管理搜索搜索框


    //将搜索框放到表头中

    _tabView.tableHeaderView = _search.searchBar;


    //初始化存储搜索数据的数组

    _resultArray = [[NSMutableArray alloc] init];

}

- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

{

    if(_isSearch){ //显示搜索时的行数

        return _resultArray.count;

    }

    return _dataArray.count;

}

- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"reuseID"];

    if(cell ==nil)

    {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"reuseID"];

    }

    if(_isSearch)

    {  //进行搜索,则显示搜索的数据

        cell.textLabel.text=_resultArray[indexPath.row];

    }else{

        //没有搜索,显示原始数据

        cell.textLabel.text=_dataArray[indexPath.row];

    }

    returncell;

}

//遵守搜索协议必须实现的方法--搜索时,触发更新的方法

- (void)updateSearchResultsForSearchController:(UISearchController*)searchController

{

    _isSearch = YES;  //改变开关状态为YES

    //触发更新前,先清除搜索存储的数组

    [_resultArray removeAllObjects];


    //循环在原始数组中取出数据与搜索框的做匹配,匹配上再存储到_resultArray

    for(NSString*stringin_dataArray) {

        //判断搜索框的内容是否在string范围

        NSRangerange = [stringrangeOfString:searchController.searchBar.text];

        //判断搜索的内容匹配上了,那么进行存储

        if(range.location!=NSNotFound)

        {

            [_resultArrayaddObject:string];

        }

    }

    [_tabView reloadData];  //搜索时,重新加载协议

}

- (void)didDismissSearchController:(UISearchController*)searchController

{

    _isSearch = NO;  //退出搜索时,状态为NO

    [_tabViewreloadData];  //退出后重新加载协议

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

/*

#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    // Get the new view controller using [segue destinationViewController].

    // Pass the selected object to the new view controller.

}

*/

@end

你可能感兴趣的:(搜索框)