如何在tableview中搜索数据?

时间:2019-07-02 17:09:30

标签: ios swift search uisearchbar

我在本地文件中有数据,我已经将它们加载到tableView中,现在我想通过搜索栏进行搜索/过滤。

我尝试了一些在Internet上找到的解决方案,但是我不知道如何访问结构中的特定数据。

这是结构的一部分:

struct Model: Codable {
    var data: [Description]
}

struct Description: Codable {
    var id: Int
    var name: String
    var address: String
    var city: String
    var description: String
    var countryId: Int
    var webSite: String
    var status: Int
    var accountType: Int
    var addDate: String
    var placeGroupId: Int
    var longitude: Double
    var latitude: Double
    var distance: Double
    var working: Bool
    var promotion: String
    var repertoire: Repertoire
    var workingHour: WorkingHour
    var country: Country
    var reviewNum: Int
    var score: Double
    var placeImgUrl: String
}

var model: Model?

这是我的ViewController中的一些代码:

var filteredObjects = [Description]()

let searchController = UISearchController(searchResultsController: nil)

func searchBarIsEmpty() -> Bool {
    return searchController.searchBar.text?.isEmpty ?? true
}

func filterContentForSearchText(_ searchText: String, scope: String = "All") {

}

extension ViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
    <#code#>
    }
}

我有变量模型,这是结构模型的类型。结构模型具有变量数据,该数据是结构描述的类型。最后,在结构描述中,我有变量名。我的tableView单元格显示了模型的名称(model?.data [indexPathrow.row] .name)。现在,我需要按tableView单元格中显示的名称进行搜索。我希望我能清楚地解释。非常感谢你!

1 个答案:

答案 0 :(得分:0)

假设objects也是[Description],并且代表数据源数组

func updateSearchResults(for searchController : UISearchController)
{
    let searchString = searchController.searchBar.text!
    if searchString.isEmpty {
        filteredObjects.removeAll()
    } else {
        filteredObjects = objects.filter{ $0.name.range(of: searchString, options: .caseInsensitive) != nil } 
    }
    tableView.reloadData()
}

在表格视图中,数据源方法根据objects显示filteredObjectssearchController.isActive