【问题标题】:how to filter array model inside UISearchBar in swift 3如何在swift 3中过滤UISearchBar中的数组模型
【发布时间】:2018-04-13 06:58:39
【问题描述】:

我有一个这样的数组模型:

 class Assess_order_med_model
{
    var name:String!
    var id:String!
    init(name:String!,id:String!) {
     self.name = name
        self.id = id
    }
}

我想根据“id”过滤我的数组。为此我正在这样做。

 var filteredData = [Assess_order_med_model]()
    override func viewDidLoad() {
        super.viewDidLoad()
        table_View.dataSource = self
        table_View.delegate  = self
        searchBar.delegate = self
        searchBar.showsCancelButton = false
        self.table_View.allowsSelection = false
        let array_vale1 = Assess_order_med_model.init(name: "New York, NY", id: "1")
               self.array_model.append(array_vale1)
                filteredData = array_model

    }

现在我正在像这样过滤我的数组

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {

        filteredData = searchText.isEmpty ? array_model : array_model.filter({(dataString: String) -> Bool in
            // If dataItem matches the searchText, return true to include it

            return dataString.range(of: searchText, options: .caseInsensitive) != nil
        })

        table_View.reloadData()
    }

但它给了我这样的错误:Assess_order_model 类型的值没有成员范围。 任何人都可以帮助我在过滤时做错了什么吗?

【问题讨论】:

  • 如果您正在搜索名称,您可以这样做:array_model.filter { $0.name.contains(searchStr) }。如果您正在寻找基于id 的搜索/过滤器,那么您也可以像这样过滤,只需使用$0.id

标签: ios swift uitableview uisearchbar


【解决方案1】:

您的array_model 包含对象Assess_order_med_model,如下更改您的textDidChange searchText

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
    let searchString = searchText.trimWhiteSpace()
    if searchString != "", searchString.count > 0 {
        let filterData = array_model.filter {
            return $0.id?.range(of: searchString, options: .caseInsensitive) != nil
        }
    }
}

这是trimWhiteSpace的通用方法,

extension String {
    func trimWhiteSpace() -> String {
        let string = self.trimmingCharacters(in: .whitespacesAndNewlines)
        return string
    }
}

【讨论】:

  • Thanx @ppl 您的代码运行良好。由于一些小错误,我已将您的代码更改为这样。func searchBar(_ searchBar:UISearchBar,textDidChange searchText:String){让searchString = searchText.trimWhiteSpace()filteredData = searchString.isEmpty? array_model : array_model.filter { return $0.name?.range(of: searchString, options: .caseInsensitive) != nil } table_View.reloadData() }
  • 我遇到了与过滤相关的问题...例如,如果我输入“new”,它会显示结果,但是当我删除像“ne”这样的 1 个字符时,它并没有引用 tableview 列表
  • 你得到了什么搜索文本?
  • 一旦我搜索了一些内容,它就会显示结果,但是当我在搜索栏列表中重新输入内容时,它并没有刷新。
  • 首先,在长代码结构的情况下,请使用if else条件
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2021-10-12
  • 2023-03-17
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2023-04-07
  • 2018-05-05
相关资源
最近更新 更多