如何从 searchResultsController (UISearchController) 更新数据
Posted
技术标签:
【中文标题】如何从 searchResultsController (UISearchController) 更新数据【英文标题】:How to update the data from the searchResultsController (UISearchController) 【发布时间】:2016-06-13 12:19:43 【问题描述】:所以我使用searchResultsController
,它接受一个字符串数组,并在表格视图中显示它们(这是一个自动完成列表)。当用户按下键盘上的“搜索”按钮,并且输入的字符串还没有在我的 Tableview 中时,我想添加它,并相应地更新 tableview。
问题是,一旦我向数组中添加了一个字符串,并进行新的搜索,数组并没有更新为新值!
这是我的代码:
在 Overview.swift 类的 ViewDidLoad() 中
class Overview: UIViewController,UISearchControllerDelegate,UISearchBarDelegate,UICollectionViewDelegate,UICollectionViewDataSource
var mySearchController : UISearchController!
var mySearchBar : UISearchBar!
override func viewDidLoad()
super.viewDidLoad()
let src = SearchResultsController(data: convertObjectsToArray())
// instantiate a search controller and keep it alive
mySearchController = UISearchController(searchResultsController: src)
mySearchController.searchResultsUpdater = src
mySearchBar = mySearchController.searchBar
//set delegates
mySearchBar.delegate = self
mySearchController.delegate = self
这是数据函数,用于UISearchController
func convertObjectsToArray() -> [String]
//open realm and map al the objects
let realm = try! Realm()
let getAutoCompleteItems = realm.objects(AutoComplete).map($0)
...
return convertArrayStrings // returns [String] with all words
所以当用户按下键盘上的搜索按钮时,我将该单词保存到我的数据库中。
现在我需要将convertObjectsToArray()
的更新版本放入我的searchResultsController
,但我还没有找到如何执行此操作。欢迎所有帮助
最后但并非最不重要的是我的SearchResultsController
类,它在我的Overview.swift
类的viewDidLoad 中使用。
class SearchResultsController : UITableViewController
var originalData : [String]
var filteredData = [String]()
init(data:[String])
self.originalData = data
super.init(nibName: nil, bundle: nil)
required init(coder: NSCoder)
fatalError("NSCoding not supported")
override func viewDidLoad()
super.viewDidLoad()
self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "Cell")
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return self.filteredData.count
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
cell.textLabel!.text = self.filteredData[indexPath.row]
return cell
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
clickedInfo = filteredData[indexPath.row]
override func numberOfSectionsInTableView(tableView: UITableView) -> Int
// #warning Incomplete implementation, return the number of sections
return 1
为了在表格视图中过滤我的单词(当用户键入内容时,只显示匹配的字符串),我使用以下扩展名。
extension SearchResultsController : UISearchResultsUpdating
func updateSearchResultsForSearchController(searchController: UISearchController)
let sb = searchController.searchBar
let target = sb.text!
self.filteredData = self.originalData.filter
s in
let options = NSStringCompareOptions.CaseInsensitiveSearch
let found = s.rangeOfString(target, options: options)
return (found != nil)
self.tableView.reloadData()
【问题讨论】:
【参考方案1】:我认为你可以使用搜索控制器的更新功能:
func updateSearchResultsForSearchController(searchController: UISearchController)
convertObjectsToArray()
self.tableView.reloadData()
【讨论】:
我已经将该函数用作扩展,但这不会将我的数据从一个类传递给另一个类,对吧?以上是关于如何从 searchResultsController (UISearchController) 更新数据的主要内容,如果未能解决你的问题,请参考以下文章
SearchResultsController 出现在 UINavigationBar
无法将视图推送到 searchResultsController
UISearchController:searchResultsController 不显示
SearchResultsController 与 UINavigationItem 一起使用时会遮挡屏幕
显示 searchResultsController 时出现 UISearchBar AutoLayout 错误
在 SearchBar Tap 上显示 UISearchController 的 SearchResultsController