UISearchBar

2016-12-23  本文已影响23人  七里田间的守望者
###声明
@interface NZFeedBackHousingViewController ()<UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource>
{
    UISearchBar* housingSearchBar;//搜索条
    UITableView* housingTableV;//显示列表的tableview
    NSArray * tableData;//保存原始数据表格
    NSArray * searchData;//保存搜索结果的数据
    BOOL isSearch;//是否搜索
}
@end

###搭建UI
- (void)viewDidLoad
 {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.automaticallyAdjustsScrollViewInsets = NO;

  //搜索的全部数据 -- 当数据为字符串的时候
    tableData = @[@"a小去1",@"a小去2",@"a小去3",@"a小去4",@"a小去5",@"a小去6",@"a小去7",@"a小去8",@"a小去9",@"a小去10",@"a小去11",];
    
    //查询框
    [self layoutHousingSearchUI];
    //查询小区列表
    [self layoutHousingNameUI];

    isSearch = NO;

}

#pragma mark UI
- (void) layoutHousingSearchUI
{
    
    housingSearchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(SP(10), 0, SCREEN_WIDTH -SP(20), SP(30))];
    housingSearchBar.placeholder = @"搜索小区名称";
    housingSearchBar.tintColor = kAppThemeColor;
    housingSearchBar.searchBarStyle = UISearchBarStyleMinimal;
//    housingSearchBar.showsCancelButton = YES;//右边的取消按钮
    housingSearchBar.delegate = self;
}

- (void) layoutHousingNameUI
{
    housingTableV = [[UITableView alloc] initWithFrame:CGRectMake(0,0, SCREEN_WIDTH, SCREEN_HEIGHT) style:UITableViewStylePlain];
    housingTableV.delegate = self;
    housingTableV.dataSource = self;
    housingTableV.showsVerticalScrollIndicator = NO;
    housingTableV.showsHorizontalScrollIndicator = NO;
    [self.view addSubview:housingTableV];
    //设置tableview的headerView为搜索框
    housingTableV.tableHeaderView = housingSearchBar;
}

以上代码是搭建UI

下面进入重点部分 -- 搜索框的代理方法


#pragma mark - UISearchBarDelegate
// UISearchBarDelegate定义的方法,用户单击取消按钮时激发该方法
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
    // 取消搜索状态
    isSearch = NO;
    [housingTableV reloadData];
    [self.view endEditing:YES];
}
// UISearchBarDelegate定义的方法,当搜索文本框内文本改变时激发该方法
- (void)searchBar:(UISearchBar *)searchBar
    textDidChange:(NSString *)searchText
{
    // 调用filterBySubstring:方法执行搜索
    [self filterBySubstring:searchText];
}

// UISearchBarDelegate定义的方法,用户单击虚拟键盘上Search按键时激发该方法
- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // 调用filterBySubstring:方法执行搜索
    [self filterBySubstring:searchBar.text];
    // 放弃作为第一个响应者,关闭键盘
    [searchBar resignFirstResponder];
}

- (void)filterBySubstring:(NSString*) subStr
{
    // 设置为搜索状态
    isSearch = YES;
    // 定义搜索谓词
    NSPredicate* pred = [NSPredicate predicateWithFormat:
                         @"SELF CONTAINS[c] %@" , subStr];
    //当数据为实体对象时
   /* NSMutableArray * tempArray = [NSMutableArray array];
    for (NZChooseHousingModel * model in tableData) {
        if([pred evaluateWithObject:model.nameStr])
        {
            [tempArray addObject:model];
        }
    }
    // 使用谓词过滤NSArray [tableData filteredArrayUsingPredicate:pred]
    searchData = tempArray;
*/

    //当数据为字符串的时候
    [tableData filteredArrayUsingPredicate:pred]


    // 让表格控件重新加载数据
    [housingTableV reloadData];
}

tableview的代理方法


#pragma mark delegate datasource

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

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

    if (isSearch)
    {
        return searchData.count;
        
    }else
    {
        return tableData.count;
    }

}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return SP(40);
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString* housingIdentifier = @"Identifier";
    UITableViewCell* myBulidCell = [tableView dequeueReusableCellWithIdentifier:housingIdentifier];
    if (!myBulidCell) {
        myBulidCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:housingIdentifier];
    }
    
    if (isSearch) {
        NZChooseHousingModel * model = [searchData objectAtIndex:indexPath.row];
        myBulidCell.textLabel.text = model.nameStr;
        myBulidCell.detailTextLabel.text = model.addressStr;
    }else{
        NZChooseHousingModel * model = [tableData objectAtIndex:indexPath.row];
        myBulidCell.textLabel.text = model.nameStr;
        myBulidCell.detailTextLabel.text = model.addressStr;
    }

    return myBulidCell;
    
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    NZChooseHousingModel * model = nil;
    if (isSearch) {//获得选中的搜索内容
        model = searchData[indexPath.row];
    }else{
        model = tableData[indexPath.row];
    }

}
7A92EBF0-39C5-4C85-8261-58BB29A705BC.png
上一篇下一篇

猜你喜欢

热点阅读