【问题标题】:swift not updating textfield.text using UIDatePickerswift 不使用 UIDatePicker 更新 textfield.text
【发布时间】:2015-03-05 00:53:57
【问题描述】:

在 swift 中,我以编程方式声明了一个 textField。

override func viewDidLoad() {
    super.viewDidLoad()
textField3.delegate = self

    textField3.returnKeyType = UIReturnKeyType.Next;
    datePicker.datePickerMode = UIDatePickerMode.Date
    datePicker.addTarget(self, action: Selector("handleDatePicker:"), forControlEvents: UIControlEvents.ValueChanged)
    textField3.inputView = datePicker


}

 func handleDatePicker(sender: UIDatePicker) {

    textField3.text = dateFormatter.stringFromDate(sender.date)
            }

我发现的所有其他问题都与界面生成器类似,但都没有帮助。我将如何以编程方式解决此问题?

【问题讨论】:

  • 你有没有试过分别创建一个DatePicker和TextField,设置TextField的inputView为DatePicker,设置DatePicker的delegate为self,并在didSelectRow方法中更新TextField文本?
  • 对不起,我不太明白你的意思。我不知道 DatePickers 有代表,我不确定是否有任何可用于 uitextfields 的 didSelectRow 方法
  • @LeonardoSavioDabus 我注意到编辑 Changed 时调用的 DatePicker 中有一个 IBAction。我如何在没有 ibaction 的情况下调用类似的函数。谢谢
  • IBAction 有什么问题?只需从 IBAction 调用您的方法

标签: ios swift uitextfield uidatepicker


【解决方案1】:

Xcode 9 • Swift 4

@objc func handleDatePicker(_ datePicker: UIDatePicker) {
    textField3.text = datePicker.date.formatted
}

override func viewDidLoad() {
    super.viewDidLoad()
    datePicker.addTarget(self, action: #selector(handleDatePicker), forControlEvents: .valueChanged)
}

extension Date {
    static let formatter: DateFormatter = {
        let formatter = DateFormatter()
        formatter.dateFormat = "EEEE, dd MMM yyyy HH:mm:ss Z"
        return formatter
    }()
    var formatted: String {
        return Date.formatter.string(from: self)
    }
}

【讨论】:

  • 目前我已经按照您的方式设置了所有内容,但是我更改了功能,而不是更改textField3.text,我只是println("hello")。没有打印到日志,当我在它上面放置断点时它不会被调用。我将UIControlEvents.ValueChanged 更改为UIControlEvents.AllEvents,但它仍然没有在日志中打印任何内容,并且断点显示该函数仍未被调用。它没有任何参数,我已经删除了:,这样选择器就不会认为我在调用带参数的函数。非常感谢您的帮助。
【解决方案2】:

Swift 3 版本的@Leo Dabus 回答:

func handleDatePicker(sender: UIDatePicker) {
        textField3.text = datePicker.date.formatted
    }

override func viewDidLoad() {
    super.viewDidLoad()
    datePicker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: UIControlEvents.valueChanged)
}

extension Date {
    var formatted: String {
        let formatter = DateFormatter()
        formatter.dateFormat = "EEEE, dd MMM yyyy HH:mm:ss Z"
        return  formatter.string(from: self as Date)
    }
}

【讨论】:

    【解决方案3】:

    在,斯威夫特 4
    确认 UITableViewDelegate
    使 txtFCheckDate.delegate = self

    func textFieldDidBeginEditing(_ textField: UITextField) {
    
        let datePickerView = UIDatePicker()
        datePickerView.datePickerMode = .date
        txtFChequeDate.inputView = datePickerView
        datePickerView.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged)
    
        if txtFChequeDate.text == "" {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "dd MMM yyyy"
            txtFChequeDate.text = dateFormatter.string(from: Date())
        }
    }
    
    @objc func handleDatePicker(sender: UIDatePicker) {
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd MMM yyyy"
        txtFChequeDate.text = dateFormatter.string(from: sender.date)
    }
    

    【讨论】:

      猜你喜欢
      • 2014-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多