zoukankan      html  css  js  c++  java
  • swift开发之--UISearchBar的使用/UISearchController的使用

    记录下UISearchBar的基本用法,补充:ios 8.0以后,原来的UISearchDisplayController被官方废弃,建议使用UISearchController,下面就简单的记录下这两种控件的使用。

    1,UISearchBar,代码如下:

    a,声明

    class NinethViewController: UIViewController,UISearchBarDelegate,UITableViewDelegate,UITableViewDataSource

    b,准备,创建所需要的变量

     var searchBar:UISearchBar!
        var hTabV:UITableView!
        
        var ctrls:[String] = ["a","b","c","d","e"]
        var ctrlsel:[String] = []

    c,具体方法和代理方法的实现

    func creatUI(){
            self.ctrlsel = self.ctrls
            
            self.searchBar = UISearchBar(frame:CGRect(x:0,y:64,kScreenWidth,height:50))
            self.searchBar.delegate = self
    //        self.searchBar.setShowsCancelButton(true, animated: true)
    //        self.searchBar.showsSearchResultsButton = true
            self.searchBar.placeholder = "请输入你想搜索的内容"
    //        self.searchBar.showsCancelButton = false
            self.view.addSubview(self.searchBar)
            
            self.hTabV = UITableView(frame:CGRect(x:0,y:50+64,kScreenWidth,height:kScreenHeight-50))
            self.hTabV.delegate = self
            self.hTabV.dataSource = self
            self.hTabV.tableFooterView = UIView()
            self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell")
            self.view.addSubview(self.hTabV)
        }

    补充,Options属性,可设置如下功能样式:

    showsSearchResultsButton  搜索框右边显示一个圆形向下的按钮,单机会发送特殊事件
    showsBookmarkButton  搜索框右边会显示一个书本的按钮,单机会发送特殊事件
    showsCancelButton  搜索框右边会出现一个“cancel”按钮,单击会发送特殊事件
    isSearchResultsButtonSelected  搜索结果按钮被选中
    showsSearchResultsButton 搜索结果显示按钮
    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
            print(searchText)
    //        没有搜索内容时显示全部组件
            if searchText == "" {
                self.ctrlsel = self.ctrls
            }else{
                self.ctrlsel = []
                for ctrl in self.ctrls {
                    if ctrl.uppercased().hasPrefix(searchText.uppercased()) {
                        self.ctrlsel.append(ctrl)
                    }
                }
            }
            self.searchBar.endEditing(true)
            self.hTabV.reloadData()
        }

    c,tableview具体代理方法的实现:

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            return self.ctrlsel.count
        }
        
        func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
            let identiferStr:String = "cell"
            let cell = tableView.dequeueReusableCell(withIdentifier: identiferStr, for: indexPath)
            cell.textLabel?.text = "(self.ctrlsel[indexPath.row])"
            cell.accessoryType = .disclosureIndicator
            
            return cell
        }

    效果如下:

    2,UISearchController的使用

    func creatUIs(){
            
            self.searchBar = UISearchBar(frame:CGRect(x:0,y:0,kScreenWidth,height:50))
            self.searchBar.showsCancelButton = true
            //通过参数searchResultsController传nil来初始化UISearchController,意思是我们告诉search controller我们会用相同的视图控制器来展示我们的搜索结果,如果我们想要指定一个不同的view controller,那就会被替代为显示搜索结果。
            searchController = UISearchController(searchResultsController:nil)
            //设置代理,searchResultUpdater是UISearchController的一个属性,它的值必须实现UISearchResultsUpdating协议,这个协议让我们的类在UISearchBar文字改变时被通知到,我们之后会实现这个协议。
            searchController.searchResultsUpdater = self as? UISearchResultsUpdating
            //默认情况下,UISearchController暗化前一个view,这在我们使用另一个view controller来显示结果时非常有用,但当前情况我们并不想暗化当前view,即设置开始搜索时背景是否显示
            searchController.dimsBackgroundDuringPresentation = false
            //设置默认显示内容
            searchController.searchBar.placeholder = "Search here..."
            //设置searchBar自适应大小
            searchController.searchBar.sizeToFit()
            //设置默认显示内容
            searchController.searchBar.delegate = self
            //设置definesPresentationContext为true,我们保证在UISearchController在激活状态下用户push到下一个view controller之后search bar不会仍留在界面上。
            searchController.definesPresentationContext = true
            
            self.hTabV = UITableView(frame:CGRect(x:0,y:0,kScreenWidth,height:kScreenHeight))
            self.hTabV.delegate = self
            self.hTabV.dataSource = self
            self.hTabV.tableFooterView = UIView()
            self.hTabV.register(UITableViewCell().classForCoder, forCellReuseIdentifier: "cell")
            //设置tableview的头视图为searchController.searchBar
            self.hTabV.tableHeaderView = searchController.searchBar
            self.view.addSubview(self.hTabV)
            
        }

    其他的searchbar的代理方法和tableview的代理方法,和上面的一样!

    效果如下图:

  • 相关阅读:
    LA 3882
    Codeforces 161D
    spoj PARTIT
    uva 10496 Collecting Beepers
    uva 10130 SuperSale
    spoj 3885
    NWERC 2012 Problem I Idol
    NWERC 2012 Problem E Edge Case
    【USACO 1.3.2】修理牛棚
    【USACO 1.3.1】混合牛奶
  • 原文地址:https://www.cnblogs.com/hero11223/p/7405501.html
Copyright © 2011-2022 走看看