【问题标题】:search table view based on date picker基于日期选择器的搜索表视图
【发布时间】:2018-06-25 15:50:09
【问题描述】:

我正在尝试使用日期选择器根据日期搜索我的表格视图,但由于某种原因表格没有更新。

目标是显示仅与从日期选择器中选择的日期匹配的单元格。 这是我的表格视图代码:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell =  tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
        let client = clinetarr[indexPath.row]

        var output: String = ""
        var resp: String = ""
        var datee: String = ""
        var index: String = ""

cell.message.numberOfLines=0

        if let i = client["index"] as? String {
            index = "\(i) "  //using space as separator

        }
        if let date = client["date"] as? String {
            datee = "\(date) "  //using space as separator


        }


        if let response = client["response"] as? String {
            resp = "\(response) "

        }

        if let message = client["message"] as? String {
            output = message
        }
        cell.indextnumber.text = index
        cell.response.text = resp
        cell.date.text = datee
        cell.message.text = output


        return cell
    }

这是我的日期选择器代码和完成按钮功能

 func createDatePicker() {


        let toolbar = UIToolbar()
        toolbar.sizeToFit()


        let done = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donebuttom))
        toolbar.setItems([done], animated: false)

        dateField.inputAccessoryView = toolbar
        dateField.inputView = picker


        picker.datePickerMode = .date
    }

    @objc func donebuttom() -> UITableViewCell{

        var output: String = ""
        var resp: String = ""
        var datee: String = ""
        var index: String = ""

        // format date
        let formatter = DateFormatter()
        formatter.dateFormat = "yyyy-MM-dd"

        let dateString = formatter.string(from: picker.date)
        let indexPath = IndexPath(row: 0, section: 0)
        let cell = tableView.cellForRow(at: indexPath) as! CustomTableViewCell
        let client = clinetarr[indexPath.row]
        dateField.text = "\(dateString)"


        if let date = client["date"] as? String {

            let dateee = "\(date) "

             let last = dateee.prefix(10)
            if last == dateString{
                if let i = client["index"] as? String {
                    index = "\(i) "

                }
                if let date = client["date"] as? String {
                    datee = "\(date) "  //using space as separator


                }


                if let response = client["response"] as? String {
                    resp = "\(response) "

                }

                if let message = client["message"] as? String {
                    output = message
                }
                tableView.reloadData()
            }
            else{
                resp=""
                 tableView.reloadData()
            }

        }

        cell.indextnumber.text = index
        cell.response.text = resp
        cell.date.text = datee
        cell.message.text = output

        tableView.reloadData()
        self.view.endEditing(true)
        return cell
    }

由于某种原因,表格没有更新 提前致谢

感谢我解决的每一个答案。 特别感谢 Duncan C,答案很简单,但我猜我的大脑被炸了。

【问题讨论】:

  • 在你的函数 donebuttom() 中,你应该操作 UITableViewDataSource (Array "clientarr") 而不是返回 UITableViewCell。
  • 你能解释更多或者举个例子吗?
  • 每次调用 tableView.reloadData() 时都会调用方法 cellForRow:at:。从 doneButtom() 返回一个 UITableViewCell 并不重要(你甚至没有使用这个 UITableViewCell)。您将需要另一个 dataSource-Array(如“filteredClientArr”)+ cellForRow:at: 中的一些逻辑来使用正确的数组,这取决于您是否需要过滤列表。或者你需要操纵你的“clientarr”来整理你不需要的条目。
  • 我做了新的数组,但我是新的 tableview。单击完成按钮后,如何使用新数组更新表格视图?

标签: swift uitableview uisearchbar uidatepicker


【解决方案1】:

您不搜索表格视图。表格视图有一个数据源,它提供模型中的单元格。

如果你想过滤你的表格视图,你需要用你想显示的项目子集创建一个新数组,编写你的数据源方法,让他们知道使用过滤后的项目列表,然后调用 reloadData()在表视图上。表格视图将负责确定有多少部分和行,并显示过滤数据的单元格。

【讨论】:

  • 好的,所以我创建了一个新方法并将新数组存储在其中,一旦完成按钮单击,我将如何更新 tableview?
  • 创建实例变量useFilteredArray 。如果您只想显示数据的子集,请将其设置为 true。在您的数据源方法中,检查标志以确定用于行数的数组,并在cellForRowAt() 中构建单元格。
  • 如果你不介意我的大脑卡住了,你能写代码吗
  • 不,我没有时间这样做。
【解决方案2】:

这是我的答案:

@objc func donebuttom() {

    // format date
    let formatter = DateFormatter()
    formatter.dateFormat = "yyyy-MM-dd"

     dateString = formatter.string(from: picker.date)

    dateField.text = "\(dateString)"
    let x =  dateString.count
     print ("here is x \(x)")

    doneclick = true
    tableView.reloadData()
    self.view.endEditing(true)

}

这是我的表格视图

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell =  tableView.dequeueReusableCell(withIdentifier: "customCell", for: indexPath) as! CustomTableViewCell
       client = clinetarr[indexPath.row]


cell.message.numberOfLines=0
        if doneclick == true{
            if let date = client["date"] as? String {

                let dateee = "\(date)"
                let last = dateee.prefix(10)
                let y = last.count

                if last == dateString{

                    if let i = client["index"] as? String {
                        index = "\(i) "  //using space as separator

                    }
                    if let date = client["date"] as? String {
                        datee = "\(date) "  //using space as separator

                    }

                    if let response = client["response"] as? String {
                        //            resp = "\(response) "
                        let x = "\(response) "
                        print ("\(x) ")
                        if x.contains("1"){
                            resp = "Present"
                        }
                        else if x.contains("2"){
                            resp = "Absent"
                        }

                        else if x.contains("3"){
                            resp = "Tardy"
                        }

                    }

                    if let message = client["message"] as? String {
                        output = message
                    }
                }else{
                    index = ""
                    datee = ""
                    resp = ""
                    output = ""
                }
            }

        }else{
        if let i = client["index"] as? String {
            index = "\(i) "  //using space as separator

        }

        if let date = client["date"] as? String {

            datee = "\(date) "  //using space as separator


        }


        if let response = client["response"] as? String {
//            resp = "\(response) "
            let x = "\(response) "
            print ("\(x) ")
            if x.contains("1"){
                resp = "Present"
            }
            else if x.contains("2"){
                resp = "Absent"
            }

            else if x.contains("3"){
                resp = "Tardy"
            }

        }

        if let message = client["message"] as? String {
            output = message
        }
        }
        cell.indextnumber.text = index
        cell.response.text = resp
        cell.date.text = datee
        cell.message.text = output


        return cell
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多