国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS UISearchController的使用方法

2020-07-26 02:55:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

UISearchController 讓用戶在 UISearchBar 上輸入搜索關(guān)鍵詞,展示搜索結(jié)果或者進(jìn)行其他操作。UISearchController 把兩個(gè)控制器(UIViewController)連在一起。父控制器放置 UISearchBar 控件。當(dāng)用戶點(diǎn)擊搜索框時(shí),UISearchBar 會(huì)移到屏幕頂部;輸入搜索關(guān)鍵詞,UISearchBar 下面出現(xiàn)子控制器的view。當(dāng)然,也可以用代碼使 UISearchBar 和子控制器展示出來(lái),即便父控制器沒(méi)有放置 UISearchBar。

一般用法

  1. 在父控制器中創(chuàng)建子控制器
  2. 用子控制器創(chuàng)建 UISearchController,通常會(huì)把 UISearchController 變成父控制器的屬性
  3. 設(shè)置 UISearchController 的searchResultsUpdater屬性
  4. 通常會(huì)在父控制器上放置 UISearchController 的searchBar
  5. 把父控制器definesPresentationContext屬性設(shè)置為 true

以下為父控制器代碼示例

let searchResultsVC = SearchResultsVC(allStrings: allStrings)searchController = UISearchController(searchResultsController: searchResultsVC)searchController.searchResultsUpdater = searchResultsVC;let tableView = UITableView(frame: view.bounds)tableView.dataSource = selfview.addSubview(tableView)tableView.tableHeaderView = searchController.searchBar;tableView.tableFooterView = UIView()definesPresentationContext = true;

UISearchController 的searchResultsUpdater屬性一般設(shè)置為父控制器或子控制器。這個(gè)屬性的值要符合 UISearchResultsUpdating 協(xié)議,實(shí)現(xiàn)updateSearchResults(for searchController: UISearchController)方法。這個(gè)方法會(huì)在searchBar變?yōu)榈谝豁憫?yīng)者(比如,當(dāng)用戶點(diǎn)擊搜索框,鍵盤彈出),以及搜索關(guān)鍵詞改變時(shí)調(diào)用。在這個(gè)方法中寫入執(zhí)行搜索、更新 UI 的代碼。

以上代碼將子控制器作為 UISearchController 的searchResultsUpdater。假設(shè)子控制器的數(shù)據(jù)源為 allStrings 和 strings,均為含 String 的 Array。其中,allStrings 為常量,包含所有的 String;strings 包含符合搜索條件的 String,需要在用戶輸入時(shí)更新。搜索條件為,含有用戶輸入的內(nèi)容,不區(qū)分大小寫。用 UITableView 展示搜索結(jié)果。在updateSearchResults(for searchController: UISearchController)方法中,獲取 searchBar 的text,更新 strings,更新 UI。

以下是子控制器代碼示例

func updateSearchResults(for searchController: UISearchController) { strings.removeAll() if let text = searchController.searchBar.text?.uppercased(), !text.isEmpty {  strings = allStrings.filter { $0.contains(text) } } tableView.reloadData()}

改變樣式

默認(rèn)情況下,用戶點(diǎn)擊搜索框,導(dǎo)航欄(navigation bar)隱藏,UISearchBar 上移,下面能看到父控制器,但有灰色蒙版遮擋。點(diǎn)擊灰色蒙版,退回父控制器。把 UISearchController 的hidesNavigationBarDuringPresentation屬性設(shè)置為false,則導(dǎo)航欄不隱藏。把 UISearchController 的dimsBackgroundDuringPresentation屬性設(shè)置為false,則灰色蒙版不顯示,能點(diǎn)擊父控制器。

搜索框?yàn)榭諘r(shí),子控制器隱藏

如果 UISearchController 的searchBar已經(jīng)放置在父控制器上,用戶點(diǎn)擊搜索框時(shí),UISearchBar 會(huì)上移至屏幕頂部,鍵盤彈出。此時(shí)會(huì)調(diào)用updateSearchResults(for searchController: UISearchController)方法,但子控制的view沒(méi)有出現(xiàn),isHidden為 true。輸入內(nèi)容后,子控制器的view才出現(xiàn)。清空輸入的內(nèi)容,子控制器的view消失。如果要在搜索框?yàn)榭諘r(shí)也顯示子控制器,在updateSearchResults(for searchController: UISearchController)方法中加入searchController.searchResultsController?.view.isHidden = false即可。

代碼展示 UISearchBar 和子控制器的方法

在父控制中可以用代碼來(lái)展示 UISearchBar 和子控制器,具體實(shí)現(xiàn)方法要看 UISearchController 的searchBar是否放置在父控制器上。

如果 UISearchController 的searchBar放置在父控制器上

UISearchBar 上移,彈出鍵盤(和用戶點(diǎn)擊搜索框一樣的效果)

searchController.searchBar.becomeFirstResponder()

UISearchBar 上移,但不彈出鍵盤

present(searchController, animated: true, completion: nil)

或者

searchController.isActive = true

如果 UISearchController 的searchBar不在父控制器上

UISearchBar 從頂部出現(xiàn),彈出鍵盤

present(searchController, animated: true, completion: nil)

搜索框一出來(lái)就成為第一響應(yīng)者,鍵盤會(huì)彈出,不知道怎么禁止鍵盤彈出。當(dāng)然,展示搜索框卻不彈出鍵盤,是奇怪的需求。

代碼已上傳GitHub:https://github.com/Silence-GitHub/SearchControllerDemo

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,同時(shí)也希望多多支持武林網(wǎng)!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平安县| 张家口市| 晋江市| 明光市| 万盛区| 全南县| 钟祥市| 板桥市| 安远县| 巴塘县| 金溪县| 扎赉特旗| 株洲市| 玉林市| 富平县| 临夏县| 玛纳斯县| 平泉县| 琼结县| 绥德县| 建阳市| 华亭县| 庐江县| 贵阳市| 龙海市| 东阿县| 玉林市| 阜阳市| 海伦市| 阳信县| 扬州市| 舟山市| 安仁县| 醴陵市| 宣武区| 旬邑县| 沽源县| 惠来县| 会理县| 会理县| 绩溪县|