UISearchController 讓用戶在 UISearchBar 上輸出搜索關鍵詞,展現搜索後果或許停止其他操作。UISearchController 把兩個控制器(UIViewController)連在一同。父控制器放置 UISearchBar 控件。當用戶點擊搜索框時,UISearchBar 會移到屏幕頂部;輸出搜索關鍵詞,UISearchBar 上面呈現子控制器的view
。當然,也可以用代碼使 UISearchBar 和子控制器展現出來,即使父控制器沒有放置 UISearchBar。
在父控制器中創立子控制器
用子控制器創立 UISearchController,通常會把 UISearchController 變成父控制器的屬性
設置 UISearchController 的searchResultsUpdater
屬性
通常會在父控制器上放置 UISearchController 的searchBar
把父控制器definesPresentationContext
屬性設置為 true
以下為父控制器代碼示例
let searchResultsVC = SearchResultsVC(allStrings: allStrings) searchController = UISearchController(searchResultsController: searchResultsVC) searchController.searchResultsUpdater = searchResultsVC; let tableView = UITableView(frame: view.bounds) tableView.dataSource = self view.addSubview(tableView) tableView.tableHeaderView = searchController.searchBar; tableView.tableFooterView = UIView() definesPresentationContext = true;
UISearchController 的searchResultsUpdater
屬性普通設置為父控制器或子控制器。這個屬性的值要契合 UISearchResultsUpdating 協議,完成updateSearchResults(for searchController: UISearchController)
辦法。這個辦法會在searchBar
變為第一呼應者(比方,當用戶點擊搜索框,鍵盤彈出),以及搜索關鍵詞改動時調用。在這個辦法中寫入執行搜索、更新 UI 的代碼。
以上代碼將子控制器作為 UISearchController 的searchResultsUpdater
。假定子控制器的數據源為 allStrings 和 strings,均為含 String 的 Array。其中,allStrings 為常量,包括一切的 String;strings 包括契合搜索條件的 String,需求在用戶輸出時更新。搜索條件為,含有用戶輸出的內容,不區分大小寫。用 UITableView 展現搜索後果。在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() }改動款式
默許狀況下,用戶點擊搜索框,導航欄(navigation bar)隱藏,UISearchBar 上移,上面能看到父控制器,但有灰色蒙版遮擋。點擊灰色蒙版,退回父控制器。把 UISearchController 的hidesNavigationBarDuringPresentation
屬性設置為false,則導航欄不隱藏。把 UISearchController 的dimsBackgroundDuringPresentation
屬性設置為false,則灰色蒙版不顯示,能點擊父控制器。
假如 UISearchController 的searchBar
曾經放置在父控制器上,用戶點擊搜索框時,UISearchBar 會上移至屏幕頂部,鍵盤彈出。此時會調用updateSearchResults(for searchController: UISearchController)
辦法,但子控制的view
沒有呈現,isHidden
為 true。輸出內容後,子控制器的view
才呈現。清空輸出的內容,子控制器的view
消逝。假如要在搜索框為空時也顯示子控制器,在updateSearchResults(for searchController: UISearchController)
辦法中參加searchController.searchResultsController?.view.isHidden = false
即可。
在父控制中可以用代碼來展現 UISearchBar 和子控制器,詳細完成辦法要看 UISearchController 的searchBar
能否放置在父控制器上。
searchBar
放置在父控制器上
searchController.searchBar.becomeFirstResponder()
present(searchController, animated: true, completion: nil)
或許
searchController.isActive = true假如 UISearchController 的
searchBar
不在父控制器上
present(searchController, animated: true, completion: nil)
搜索框一出來就成為第一呼應者,鍵盤會彈出,不知道怎樣制止鍵盤彈出。當然,展現搜索框卻不彈出鍵盤,是奇異的需求。
代碼已上傳GitHub:https://github.com/Silence-GitHub/SearchControllerDemo
轉載請注明出處:http://www.cnblogs.com/silence-cnblogs/p/6405545.html
【iOS UISearchController 的運用辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!