zoukankan      html  css  js  c++  java
  • iOS原生的搜索:UISearchController

    iOS8之前我们使用UISearchDisplayController做TableView的本地搜索,查看UIKit库,苹果已经使用新控件取代它。

    NS_CLASS_DEPRECATED_IOS(3_0, 8_0, "UISearchDisplayController has been replaced with UISearchController") __TVOS_PROHIBITED

    使用UISearchDisplayController的时候,搜索结果的展示tableView系统已经帮我们封装好,但是使用UISearchController,我们需要提供一个搜索结果的展示TableView.

    如何使用UISearchController实现搜索功能呢?

    1创建一个搜索结果展示TableViewController

    .h文件

    #import <UIKit/UIKit.h>
    
    @interface SearchResultVC : UITableViewController
    // 搜索结果数据
    @property (nonatomic, strong) NSMutableArray *resultsArray;
    @end

    .m

    #import "SearchResultVC.h"
    
    @interface SearchResultVC ()
    
    @end
    
    @implementation SearchResultVC
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    - (void)didReceiveMemoryWarning {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    #pragma mark - Table view data source
    
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
       return self.resultsArray.count;
    }
    
    
    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
        UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"RESULT_CELL"];
        if (cell == nil) {
            cell = [tableView dequeueReusableCellWithIdentifier:@"RESULT_CELL"];
        }
        cell.textLabel.text = self.resultsArray[indexPath.row];
        cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
        return cell;
    
    }

    2 创建一个UISearchController

    - (void)initSearchController{

        SearchResultVC *resultTVC = [[SearchResultVC alloc] initWithStyle:UITableViewStylePlain];

        UINavigationController *resultVC = [[UINavigationController alloc] initWithRootViewController:resultTVC];

        self.searchController = [[UISearchController alloc]initWithSearchResultsController:resultVC];

        self.searchController.searchResultsUpdater = self;

        //self.searchController.dimsBackgroundDuringPresentation = NO;

        //self.searchController.hidesNavigationBarDuringPresentation = NO;

        self.searchController.searchBar.frame = CGRectMake(self.searchController.searchBar.frame.origin.x,self.searchController.searchBar.frame.origin.y,self.searchController.searchBar.frame.size.width,44);

        self.tableView.tableHeaderView = self.searchController.searchBar;

            self.searchController.searchBar.delegate = self;

    }

    3 实现UISearchController的UISearchResultsUpdating方法,当开始搜索的时候响应。并且实现筛选的逻辑

    #pragma mark - UISearchResultsUpdating
    
    - (void)updateSearchResultsForSearchController:(UISearchController *)searchController{
        UINavigationController *navController = (UINavigationController *)self.searchController.searchResultsController;
        SearchResultVC *resultVC = (SearchResultVC *)navController.topViewController;
        [self filterContentForSearchText:self.searchController.searchBar.text];
        resultVC.resultsArray = self.tempsArray;
        [resultVC.tableView reloadData];
    }
    
    #pragma mark - Private Method
    - (void)filterContentForSearchText:(NSString *)searchText{
        NSLog(@"%@",searchText);
        NSUInteger searchOptions = NSCaseInsensitiveSearch | NSDiacriticInsensitiveSearch;
        [self.tempsArray removeAllObjects];
        for (int i = 0; i < self.resultArray.count; i++) {
            NSString *title = self.resultArray[i];
            NSRange storeRange = NSMakeRange(0, title.length);
            NSRange foundRange = [title rangeOfString:searchText options:searchOptions range:storeRange];
            if (foundRange.length) {
                [self.tempsArray addObject:self.resultArray[i]];
            }
        }
    }

    完成了,就是这么简单,UI什么的可以自定义。简单demo可以去我github上下载:https://github.com/wangdachui/WTUISearchController

  • 相关阅读:
    自动换行的两种代码(C#)
    C#的SubString(int start,int end);
    php数组添加元素的方法
    php通过生成动态变量(变量名中还有变量)
    php定义空的数组
    php的$GLOBALS例子
    WINCRIS的使用
    java的PreparedStatement中使用like时的问题
    php发送get请求
    在HTML中使用object和embed标签插入视频
  • 原文地址:https://www.cnblogs.com/6duxz/p/5099962.html
Copyright © 2011-2022 走看看