的UISearchBar取出由JSON(SWIFT 3)数据
问题描述:
我已经保存了数据的类从我的API的UISearchBar取出由JSON(SWIFT 3)数据
class Shops {
private var _familiy_id: String?
private var _logo : String?
private var _shopname : String?
var familiy_id : String{
return _familiy_id!
}
var shopname : String{
return _shopname!
}
var Logo : String{
return _logo!
}
init(shopname : String , Logo : String , family_id : String) {
self._shopname = shopname
self._logo = Logo
self._familiy_id = family_id
}
}
我想过滤的店铺名称,并张开,如果用户编辑搜索未来酒吧。所以我试了这个代码:
var searchActive : Bool = false
var filtered:[Shops] = []
var shops = [Shops]()
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = searchText.isEmpty ? shops : shops.filter { (item: String) -> Bool in
// If dataItem matches the searchText, return true to include it
return item.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
}
tableView.reloadData()
}
但我得到一个错误,说该项目没有成员范围! 很抱歉,这是我第一次在我的项目实施的UISearchBar时间,所以我想从其他代码
答
学习用下面的方法
更换你的方法,你也可以替换字符串的方法hasPrefix
您的要求 像包含
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = shops.filter { $0. _shopname.range(of: searchText, options: .caseInsensitive, range: nil, locale: nil) != nil
}
tableView.reloadData()
}
答
退房此链接How to implement UISearchController in UITableView - SWIFT并添加代码在此功能func updateSearchResults(for searchController: UISearchController)
试试这个:
// MARK: UISearchResultsUpdating delegate function
// example for search user in userlist and change it as your requirements.
func updateSearchResults(for searchController: UISearchController) {
guard let searchString = searchController.searchBar.text else {
return
}
// Filter the data array and get only those userlist that match the search text.
filteredArray = self.userList.filter{
let firstName = $0.first_name.lowercased()
let middleName = $0.middle_name.lowercased()
let lastName = $0.last_name.lowercased()
let contactNumber = $0.mobile.lowercased()
let fullName = $0.fullname.lowercased()
return firstName.range(of: searchString.lowercased()) != nil
|| middleName.range(of: searchString.lowercased()) != nil
|| lastName.range(of: searchString.lowercased()) != nil
|| contactNumber.range(of: searchString.lowercased()) != nil
|| fullName.range(of: searchString.lowercased()) != nil
}
// Reload the tableview.
tableView.reloadData()
}
希望这可以帮助你
什么也没有发生!只要表格重新加载,而我在搜索栏中输入 – leo0019
你有没有检查你是从过滤数组中提取数据 –
正确获取数据,但表格没有改变。我认为它需要一个返回过滤的商店,然后重新加载表 – leo0019