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,width: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,width: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,width: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,width: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的代理方法,和上面的一樣!

效果如下圖:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM