美文网首页
UISearchBarController

UISearchBarController

作者: DDY | 来源:发表于2016-11-29 12:40 被阅读216次
    //  Created by Rain Dou on 15/5/18.
    //  Copyright © 2015年 634778311 All rights reserved.
    
    #import "DDYSearchVC.h"
    
    @interface DDYSearchVC ()<UISearchResultsUpdating, UISearchBarDelegate>
    
    @property (nonatomic, strong) UISearchController *searchController;
    @property (nonatomic, strong) NSMutableArray *dataArray;
    @property (nonatomic, strong) NSMutableArray *tempsArray;
    @property (nonatomic, strong) UIButton       *testLab;
    
    @end
    
    @implementation DDYSearchVC
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        self.tableView.bounces = NO;
        self.definesPresentationContext = YES;
        [self layoutSearchController];
        [self layoutTestView];
        self.tableView.tableFooterView = [UIView new];
        self.edgesForExtendedLayout = UIRectEdgeTop;
        [self loadData];
    }
    
    - (NSMutableArray *)dataArray {
        if (!_dataArray) {
            _dataArray = [NSMutableArray array];
        }
        return _dataArray;
    }
    
    - (NSMutableArray *)tempsArray {
        if (!_tempsArray) {
            _tempsArray = [NSMutableArray array];
        }
        return _tempsArray;
    }
    
    - (void)layoutTestView {
        _testLab = [UIButton buttonWithType:UIButtonTypeCustom];
        [_testLab addTarget:self action:@selector(openMobileContact) forControlEvents:UIControlEventTouchUpInside];
        [_testLab setTitle:@"Add Friends" forState:UIControlStateNormal];
        [_testLab setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
        [_testLab setImage:[UIImage imageNamed:@"addFriends"] forState:UIControlStateNormal];
        _testLab.frame = CGRectMake(DDYSCREENW/2.0-100, 80, 200, 200);
        [self.tableView addSubview:_testLab];
        _testLab.titleLabel.font = [UIFont systemFontOfSize:14];
        _testLab.hidden = YES;
        [_testLab DDYStyle:DDYStyleImgTop padding:8.0];
    }
    - (void)openMobileContact{  
    }
    
    - (void)layoutSearchController {
        self.searchController = [[UISearchController alloc] initWithSearchResultsController:nil];
        self.searchController.searchResultsUpdater = self;
        self.searchController.searchBar.placeholder = @"搜索";
        self.searchController.dimsBackgroundDuringPresentation = NO;
         self.searchController.hidesNavigationBarDuringPresentation = NO;
        
        self.searchController.searchBar.frame = CGRectMake(0, 0, DDYSCREENW, 44);
        self.tableView.tableHeaderView = self.searchController.searchBar;
        self.searchController.searchBar.delegate = self;
    }
    
    #pragma mark - Table view data source
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        
        return !self.searchController.active ? self.dataArray.count : self.tempsArray.count;
    }
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"CELL"];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"CELL"];
        }
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.textLabel.text = !self.searchController.active ? self.dataArray[indexPath.row] : self.tempsArray[indexPath.row];
        return cell;
    }
    
    - (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
        return 0;
    }
    
    #pragma mark - UISearchResultsUpdating
    - (void)updateSearchResultsForSearchController:(UISearchController *)searchController {
        [self filterContentForSearchText:self.searchController.searchBar.text];
        [self.tableView reloadData];
    }
    
    #pragma mark - Private Method
    #pragma mark 源字符串内容是否包含或等于要搜索的字符串内容
    - (void)filterContentForSearchText:(NSString *)searchText{
        if (searchText.length==0 && self.searchController.active) {
            _testLab.hidden = NO;
        }
        else{
            _testLab.hidden = YES;
        }
        NSUInteger searchOptions = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
        [self.tempsArray removeAllObjects];
        for (int i = 0; i < self.dataArray.count; i++) {
            NSString *title = self.dataArray[i];
            NSRange storeRange = NSMakeRange(0, title.length);
            NSRange foundRange = [title rangeOfString:searchText options:searchOptions range:storeRange];
            if (foundRange.length) {
                [self.tempsArray addObject:self.dataArray[i]];
            }
        }
    }
    
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        // 防止点击cell后仍有颜色
        [tableView deselectRowAtIndexPath:indexPath animated:YES];
    }
    
    #pragma mark - UISearchBarDelegate
    - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar{
        _testLab.hidden = YES;
    }
    
    // 不用这种形式,可能有时候第一次展示没改变颜色,只改变了文字
    //- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    //    searchBar.showsCancelButton = YES;
    //    _testLab.hidden = NO;
    //    for(UIView *view in  [[[searchBar subviews] objectAtIndex:0] subviews]) {
    //        if([view isKindOfClass:[NSClassFromString(@"UINavigationButton") class]]) {
    //            UIButton *cancelBtn =(UIButton *)view;
    //            cancelBtn.titleLabel.font = DDYFont(17);
    //            [cancelBtn setTitle:DDYLocalStr(@"Cancel") forState:UIControlStateNormal];
    //            [cancelBtn setTitleColor:FF_MAIN_COLOR forState:UIControlStateNormal];
    //            [cancelBtn setTitleColor:FF_MAIN_COLOR forState:UIControlStateHighlighted];
    //        }
    //    }
    //    return YES;
    //}
    
    - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
        _testLab.hidden = NO;
        // 改变取消字体
        _searchController.searchBar.showsCancelButton = YES;
        UIButton *cancelBtn = [_searchController.searchBar valueForKey:@"cancelButton"];
        [cancelBtn setTitleColor:FF_MAIN_COLOR forState:UIControlStateNormal];
        [cancelBtn setTitle:DDYLocalStr(@"Cancel") forState:UIControlStateNormal];
        return YES;
    }
    
    - (void)loadData {
        // 网络请求
        [self.tableView reloadData];
    }
    
    @end
    

    相关文章

      网友评论

          本文标题:UISearchBarController

          本文链接:https://www.haomeiwen.com/subject/azvapttx.html