【问题标题】:Search based on multiple parameters from UItableView根据 UItableView 中的多个参数进行搜索
【发布时间】:2018-03-11 09:14:19
【问题描述】:

我需要在 UITableView 中搜索多个数据(姓名、联系电话、电子邮件、状态等),用户可以按姓名或电话号码进行搜索以搜索记录。数据是通过模型处理的,这意味着数组中有对象。所以,我不知道如何以这种方式进行搜索。

以这种方式在 UITableViewCell 中显示数据:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell: VisitorsCell = tableView.dequeueReusableCell(withIdentifier: "VisitorsCell", for: indexPath) as! VisitorsCell

    let dss:VisitorsDs = VisitorsArray[indexPath.row] as! VisitorsDs

    dss.ageFromDate = ds.age
    cell.lblAge.text = dss.ageFromDate
    cell.lblName.text = dss.namePlain
    cell.lblMobile.text = dss.mobilePlain
    cell.lblPurpose.text = dss.purpose
    cell.lblParentsName.text = dss.parentsName
    cell.lblTime.text = dss.time
    cell.lblDate.text = dss.date
    cell.lblClinic.text = dss.clinic

    return cell

}

更新:

let dss:VisitorsDs = VisitorsArray as! VisitorsDs

    let filteredArray = self.VisitorsArray.filter(using: {($0.dss.namePlain.contains(txtSearch.text)) || ($0.dss.mobilePlain.contains(txtSearch.text))})

【问题讨论】:

  • 在用户可以搜索VisitorsDs的每个属性上使用filter()NSPredicate

标签: ios uitableview search model-view-controller swift3


【解决方案1】:

终于找到了自己,但感谢@Aditya Srivastava 和@Larme 让我走上了正轨。

arrSearchResults = recentVisitorsArray.filter{ ($0.namePlain.contains(txtSearch.text!)) || ($0.mobilePlain.contains(txtSearch.text!)) }

我犯的错误是:

 //var recentVisitorsArray:NSMutableArray = NSMutableArray()

正确的做法是:

var recentVisitorsArray = [RecentVisitorsDs]()
var arrSearchResults = [RecentVisitorsDs]()

【讨论】:

    【解决方案2】:

    考虑使用专为此目的设计的UISearchControllerThis tutorial 似乎正是您正在寻找的——如何将搜索集成到表格视图中。

    【讨论】:

      【解决方案3】:

      在调用 tableview.reloadData() 之前,需要对数组中的对象进行过滤

      在您转发到表格视图要显示多少行后,您无法再过滤任何记录。

      【讨论】:

        【解决方案4】:

        我假设您的 namePlainmobilePlain 是字符串。试试这个 -

        let filteredArray = self.VisitorsArray.filter({($0.namePlain.contains(yourSearchTextField.text)) || ($0.mobilePlain.contains(yourSearchTextField.text))})
        

        【讨论】:

        • 其实是一个字符串,但是不能直接访问。因为我正在使用类的实例来访问它。
        • @iPhone6 好的,在答案中使用上面的代码。并使用filteredArray 作为您的数据源
        • 错误:表达式类型不明确,没有更多上下文
        • @iPhone6 为什么你在 $0 之后使用dss。 $0 是 dss,表示您的对象类型为 VisitorsDs
        • 也试过了,同样的错误。这就是为什么尝试使用 dss
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-17
        • 2019-02-13
        • 2013-10-08
        相关资源
        最近更新 更多