2017-08-09 72 views
0

我已经保存了数据的类从我的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时间,所以我想从其他代码

回答

0

学习用下面的方法

更换你的方法,你也可以替换字符串的方法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() 
    } 
+0

什么也没有发生!只要表格重新加载,而我在搜索栏中输入 – leo0019

+0

你有没有检查你是从过滤数组中提取数据 –

+0

正确获取数据,但表格没有改变。我认为它需要一个返回过滤的商店,然后重新加载表 – leo0019

0

退房此链接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() 
} 

希望这可以帮助你

+0

谢谢你的回应。问题是我不知道如何在过滤器的数组中创建商店的名称。到目前为止,它的数组为 – leo0019

+0

'let filteredArray = shops.filter {let shopname = $ 0.shopname.lowercased()return shopname.range(of:searchString.lowercased())!= nil}' 您试过了吗上面的代码?它会帮助你,请尝试。 – Yuyutsu