如何在tableview中搜索数据?

Posted

技术标签:

【中文标题】如何在tableview中搜索数据?【英文标题】:How to search data in tableview? 【发布时间】:2019-07-02 17:09:30 【问题描述】:

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

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

这是结构的一部分:

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】:

假设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()

在表格视图中数据源方法显示objectsfilteredObjects取决于searchController.isActive

【讨论】:

对不起,我必须按名称搜索模型。我的错,对不起。 Model 没有属性name 好的。我有变量模型,它是结构模型的类型。结构模型有一个变量数据,它是结构描述的类型。最后,在结构描述中,我有变量名。我的 tableView 单元格显示模型的名称 (model?.data[indexPathrow.row].name)。现在,我需要按 tableView 单元格中显示的名称进行搜索。我希望我现在解释得更清楚了。非常感谢! 将数据源数组声明为非可选数组[Description],并为其赋值model.data。其实model与搜索和显示数据无关。 好的,我试试。再次感谢您。

以上是关于如何在tableview中搜索数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用此代码在 tableview 中使用搜索栏?

如何在更新 tableview 时使用搜索栏对我的 NSFetchedResults 数据进行排序,而不会在 fetchedRC.performFetch() 上崩溃?更新

在tableview中搜索时如何更改文本“无结果”?

如何在 swift3 中使用 tableview 和 searchbarcontroller 创建范围搜索

如何在 tableview 搜索栏中获取对 navigationcontroller 的引用?

iOS如何在少数Data表中搜索数据Parse swift 4