你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS UISearchController 的運用辦法

iOS UISearchController 的運用辦法

編輯:IOS開發綜合

IOS UISearchController 的運用辦法

UISearchController 讓用戶在 UISearchBar 上輸出搜索關鍵詞,展現搜索後果或許停止其他操作。UISearchController 把兩個控制器(UIViewController)連在一同。父控制器放置 UISearchBar 控件。當用戶點擊搜索框時,UISearchBar 會移到屏幕頂部;輸出搜索關鍵詞,UISearchBar 上面呈現子控制器的view。當然,也可以用代碼使 UISearchBar 和子控制器展現出來,即使父控制器沒有放置 UISearchBar。

普通用法
  1. 在父控制器中創立子控制器

  2. 用子控制器創立 UISearchController,通常會把 UISearchController 變成父控制器的屬性

  3. 設置 UISearchController 的searchResultsUpdater屬性

  4. 通常會在父控制器上放置 UISearchController 的searchBar

  5. 把父控制器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 和子控制器的辦法

在父控制中可以用代碼來展現 UISearchBar 和子控制器,詳細完成辦法要看 UISearchController 的searchBar能否放置在父控制器上。

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

UISearchBar 上移,彈出鍵盤(和用戶點擊搜索框一樣的效果)
searchController.searchBar.becomeFirstResponder()

UISearchBar 上移,但不彈出鍵盤
present(searchController, animated: true, completion: nil)

或許

searchController.isActive = true
假如 UISearchController 的searchBar不在父控制器上

UISearchBar 從頂部呈現,彈出鍵盤
present(searchController, animated: true, completion: nil)

搜索框一出來就成為第一呼應者,鍵盤會彈出,不知道怎樣制止鍵盤彈出。當然,展現搜索框卻不彈出鍵盤,是奇異的需求。

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

轉載請注明出處:http://www.cnblogs.com/silence-cnblogs/p/6405545.html


【iOS UISearchController 的運用辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved