2017-08-09 70 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