所以,我有一个 tableview 、一个文本字段和一个包含一些数据的数组。我想要实现的是,每当我开始在文本字段中输入时,一个 filter() 方法应该在我的包含数据的数组上触发,并且 tablview 应该返回与我在文本字段中输入的字符匹配的数据。
例如,如果我输入 W,它应该给出“Walmart”、“Wally”、“Wily”等结果。如果我输入“Sac”,它应该给出“sacramento”、“satisfied”等. 简而言之,一个完全不使用任何外部库的自动完成文本字段。
我知道这很简单,我试过这样做但我得到的数据为零。另外,我是 swift 的新手。请帮助任何人:-)
最佳答案
看看这个link
对于我的情况,这是 UISearchbar 的解决方案。我正在获取字典数组并执行搜索
//MARK:- search items & reload table
func filter(array : [[String : [MyModel]]], byString filterString : String) {
let searchByNamesArray = array.filter { $0.values.contains { $0.contains { $0.nameString.lowercased().contains(filterString.lowercased())} } }
//Assign searched array into arrayOfMerchants
self.arrayOfItems = searchByNamesArray
//Reload table with new Data
self.merchantTableView.reloadData()
}
搜索条形码
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchBar.resignFirstResponder()
if !((searchBar.text?.isEmpty)!){
filter(array: self.arrayOfItems, byString: searchBar.text!)
}
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
if (searchBar.text?.isEmpty)! //in case there is no text in Searchbar, reload all record
{
self.arrayOfItems = self.arrayOfRecordsHolding //array of original record holder
self.merchantTableView.reloadData()
}
else
{
self.arrayOfItems = self.arrayOfRecordsHolding
filter(array: self.arrayOfMerchants, byString: searchBar.text!)
}
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
//reload all data when cancel button pressed on searchbar
self.arrayOfItems = self.arrayOfRecordsHolding
searchBar.text = ""
self.merchantTableView.reloadData()
searchBar.resignFirstResponder()
}
关于ios - 在 swift 中使用 tableview 和数组过滤器自动完成文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49609594/