为什么UIDatePicker会填充两个不同的TextField相同的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么UIDatePicker会填充两个不同的TextField相同的值相关的知识,希望对你有一定的参考价值。

当我从点击UIDatePicker后显示的UITextField中选择值时,我的TextFields填写了相同的值

override func viewDidLoad() {
        super.viewDidLoad()
        datepickerView = UIDatePicker()
        datepickerView?.datePickerMode = .time

        datepickerView?.addTarget(self, action: #selector(HomePageViewController.timeChangedForStartWork(datePicker:)), for: .valueChanged)

        datepickerView?.addTarget(self, action: #selector(HomePageViewController.timeChangedForEndWork(datePicker:)), for: .valueChanged)

        workHoursStartTextField.inputView = datepickerView
        workHoursEndTextField.inputView = datepickerView
}

@objc func timeChangedForStartWork(datePicker: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        workHoursStartTextField.text = dateFormatter.string(from: datePicker.date)
    }

@objc func timeChangedForEndWork(datePicker: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "HH:mm"
        workHoursEndTextField.text = dateFormatter.string(from: datePicker.date)

    }

我应该为每个TextField实现不同的datePicker吗?

答案

您将两个操作添加到日期选择器。两个文本字段使用相同的日期选择器。因此,当任一文本字段的数据选择器值发生更改时,将调用两个选择器。由于两个选择器都被调用,因此两个文本字段都会使用新值进行更新。

只需要一个选择。只需向日期选择器添加一个操作即可。然后在一个选择器中,更新当前是第一个响应者的文本字段。

override func viewDidLoad() {
    super.viewDidLoad()

    datepickerView = UIDatePicker()
    datepickerView?.datePickerMode = .time

    datepickerView?.addTarget(self, action: #selector(timeChanged), for: .valueChanged)

    workHoursStartTextField.inputView = datepickerView
    workHoursEndTextField.inputView = datepickerView
}

@objc func timeChanged(datePicker: UIDatePicker) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "HH:mm"
    let str = dateFormatter.string(from: datePicker.date)
    if workHoursStartTextField.isFirstResponder {
        workHoursStartTextField.text = str
    } else {
        workHoursEndTextField.text = str
    }
}

以上是关于为什么UIDatePicker会填充两个不同的TextField相同的值的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 部分中的 NSDates 不反映来自 UIDatePicker 的日期

如何重写 UIDatePicker 组件?

选择视图 0 时,UIDatePicker 将分钟设置为 1

指定stackview的arrangedSubviews之间的不同间距

如何使用来自两个不同表的旧信息自动填充编辑表单?

为啥这两个 NHibernate 查询会产生不同的结果?