【问题标题】:UISearchBar fetching data from Json ( SWIFT 3 )UISearchBar 从 Json (SWIFT 3) 获取数据
【发布时间】:2017-08-09 02:24:58
【问题描述】:

我有一个类保存来自我的 api 的数据

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,所以我正在尝试从其他代码中学习

【问题讨论】:

    标签: json swift swift3 uisearchbar


    【解决方案1】:

    查看此链接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()
    }
    

    希望对你有所帮助

    【讨论】:

    • 感谢您的回复。问题是我不知道如何将商店的名称放在过滤器的数组中。到目前为止,它在数组中作为 Data
    • let filteredArray = shops.filter{ let shopname = $0.shopname.lowercased() return shopname.range(of: searchString.lowercased()) != nil} 你试过上面的代码了吗?它会帮助你,请尝试一下。
    猜你喜欢
    • 2018-06-15
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多