美文网首页
Swift_UISearchController详解

Swift_UISearchController详解

作者: YHWXQ简简单单的生活 | 来源:发表于2016-09-12 16:41 被阅读492次

到了iOS8,苹果废除UISearchDisplayController,建议我们使用UISearchController配合UITableView来实现。我们可以把搜索
条放在表格头部,或者放在页面顶部,还是很灵活的。下面通过代码演示如何使用UISearchController实现具有搜索功能的表格。

NS_CLASS_DEPRECATED_IOS(3_0, 8_0, “UISearchDisplayController has been replaced with UISearchController”)

效果图_使用UISearchController实现带搜索栏的表格

IMG_4173.PNG
IMG_4176.PNG

效果图_在表格头部添加一个带范围选择(scope bar)的搜索栏

IMG_4174.PNG IMG_4175.PNG
1. initWithSearchResultsController
1. 在初始化UISearchController,它要求我们要先设计好的searchResultsController这个控制器,它可以是UITableViewController,也可以是UICollectionViewController,也可以是nil。
2. 如果设为nil的话,那数据源和搜索结果共用一个Controller。
2. dimsBackgroundDuringPresentation 设置开始搜索时背景是否显示
3. hidesNavigationBarDuringPresentation 设置开始搜索时导航条是否隐藏
4. searchResultsUpdater
这个方法很重要,当searchBar的字符内容改变时系统回调,我们一般在这里查找符合条件的搜索结果。

代码

    //搜索控制器
    var countrySearchController = UISearchController()

    override func viewDidLoad() {
        super.viewDidLoad()
        //配置搜索控制器
        self.countrySearchController = {
            let controller = UISearchController(searchResultsController: nil)
            controller.searchResultsUpdater = self
            // 设置开始搜索时导航条是否隐藏
            controller.hidesNavigationBarDuringPresentation = true
            // 设置开始搜索时背景是否显示
            controller.dimsBackgroundDuringPresentation = false
            controller.searchBar.searchBarStyle = .Minimal
            controller.searchBar.placeholder = "请输入学校名称"
            controller.searchBar.sizeToFit()
            self.tableView.tableHeaderView = controller.searchBar
            return controller
        }() 
    }

    extension ViewController: UISearchResultsUpdating {
      func updateSearchResultsForSearchController(searchController: UISearchController) {
    }
}
5. NSPredicate
搜索过程中一般使用NSPredicate。
谓词中SELF代表被查询的集合。这句谓词的意思是查找集合中包含搜素字符串的数据。

extension ViewController: UISearchResultsUpdating {
    func updateSearchResultsForSearchController(searchController: UISearchController) {
        self.searchArray.removeAll(keepCapacity: false)
        let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!)
        let arry = (self.schoolArray as NSArray).filteredArrayUsingPredicate(searchPredicate)
        self.searchArray = arry as! [String]
    }
}

UISearchControllerDemo 我放到网盘上了。https://pan.baidu.com/s/1pLap5Ir
我写了两篇Demo,使用UISearchController实现带搜索栏的表格在表格头部添加一个带范围选择(scope bar)的搜索栏
原文出自:www.hangge.com

相关文章

网友评论

      本文标题:Swift_UISearchController详解

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