swift - 在 tableview 中从 UIDatePicker 更新 UILabel

标签 swift uitableview uidatepicker

我正在构建一个静态表格 View ,其中一个单元格包含标签,另一个单元格包含 UIDatePicker。我想使用日期选择器中的日期更新标签,但标签中的文本不会更新。有人可以指出我正确的方向吗?

到目前为止我的代码如下所示:

class HomeController: UIViewController {

    let tableView: UITableView = UITableView()

    private var showDatePicker: Bool = false

    var dateLabel = "Select date"
    var datePicker = UIDatePicker()



extension HomeController: UITableViewDelegate, UITableViewDataSource {

    @objc func datePickerChanged(sender: UIDatePicker) {
        let formatter: DateFormatter = DateFormatter()
        formatter.dateStyle = .medium
        formatter.timeStyle = .short

        let selectedDate = formatter.string(from: sender.date)
        dateLabel = selectedDate
        print("The selected date is: \(selectedDate)")
    }



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

        switch indexPath.row {
        case 0:
            let dateCell = tableView.dequeueReusableCell(withIdentifier: dateId, for: indexPath) as! DateCell
            dateCell.homeController = self
            dateCell.dateTextLabel.text = dateLabel
            return dateCell

        case 1:
            let datePickerCell = tableView.dequeueReusableCell(withIdentifier: datePickerId, for: indexPath) as! DatePickerCell
            datePickerCell.homeController = self

            datePicker = datePickerCell.datePicker
            datePicker.addTarget(self, action: #selector(datePickerChanged(sender:)), for: .valueChanged)
            return datePickerCell
    }
}

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {

        if indexPath.row == 0 {
            toggleShowDatePicker(tableView)
            datePickerChanged(sender: datePicker)
        }
        tableView.deselectRow(at: indexPath as IndexPath, animated: true)
    }

    private func toggleShowDatePicker(_ tableView: UITableView) {
        showDatePicker = !showDatePicker
        tableView.beginUpdates()
        tableView.endUpdates()
    }

最佳答案

datePickerChanged 方法的末尾,您需要告诉表格 View 重新加载第一个单元格。

您可以使用tableView.reloadData()重新加载整个表格 View ,但您应该只重新加载一个单元格。使用以下行执行此操作:

tableView.reloadRows(at: [IndexPath(row: 0, section: 0)], with: .fade)

将其作为 datePickerChanged 方法的最后一行。

关于swift - 在 tableview 中从 UIDatePicker 更新 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46026226/

相关文章:

ios - 无法重新加载 TableView

ios - 在 Swift 中放置在 UIViewController 内的 tableView 上的无限滚动

ios - 如何避免 UITableView reloadData 中的竞争条件?

ios - 快速从 DatePicker 获取日期/时间

ios - 照片选择器,选择后,图像太大

swift - 使用 Xcode 7/Swift 2 writeToPath 到资源文件调用不会失败但没有写入数据

ios - 如果执行操作时间过长,则退出无限循环

ios - 包含 UIStackViews 的 UITableViewCell 使用大量内存

ios - 限制 UIDate View 滚动到旧日期?

xcode - 从特定时间限制 UIDatePicker 日期。例如输入 DOB 以限制年龄限制