【问题标题】:Two textfield with same date picker具有相同日期选择器的两个文本字段
【发布时间】:2017-11-28 10:23:55
【问题描述】:

我有两个要输入时间的文本字段。 我已经让其中一个文本字段可以工作,因此 inputView 是一个日期选择器,但是,我不知道是否有一种简单的方法可以更改我的代码,以便其他文本字段也有一个日期选择器作为输入字段。

这是我的代码:

func createDatePicker(){
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

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

    fromTextField.inputAccessoryView = toolbar
    fromTextField.inputView = picker


    picker.datePickerMode = .time
    picker.minuteInterval = 15

}
@objc func donePressed(){
    let formatter = DateFormatter()
    formatter.dateStyle = .none
    formatter.timeStyle = .short
    let dateString = formatter.string(from: picker.date)

    fromTextField.text = "\(dateString)"
    self.view.endEditing(true)

}

除了复制这两个函数之外,使该代码也适用于 toTextField 的最佳方法是什么?

【问题讨论】:

  • 您可以在Textfield中使用标签,并在此函数中传递相应文本字段的对象。
  • 你好,为什么不使用可以传递文本字段的日期选择器片段

标签: ios swift swift3 uidatepicker


【解决方案1】:

对于创建两个与 inputView 具有相同选择器视图的文本字段 @CZ54 的答案是正确的,即

func createDatePicker(forField field : UITextField){
    let toolbar = UIToolbar()
    toolbar.sizeToFit()

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

    field.inputAccessoryView = toolbar
    field.inputView = picker


    picker.datePickerMode = .time
    picker.minuteInterval = 15

}

//later
self.createDatePicker(forField: fromTextField)
self.createDatePicker(forField: toTextField)

要根据活动的 textField 从 pickerView 获取数据,您必须创建一个 UITextField 类型的变量并将其分配如下:

var activeTextField: UITextField!

func textFieldDidBeginEditing(_ textField: UITextField) {
     activeTextField = textField
}

每当在pickerView中选择行时,您都可以执行相关操作

if activeTextField == fromTextField {
     //action
} else if activeTextField == toTextField {
     //action
}

【讨论】:

    【解决方案2】:

    你可以这样做:

    func createDatePicker(forField field : UITextField){
        let toolbar = UIToolbar()
        toolbar.sizeToFit()
    
        //done button
        let done = UIBarButtonItem(barButtonSystemItem:.done, target: nil, action: #selector(donePressed))
        toolbar.setItems([done], animated: false)
    
        field.inputAccessoryView = toolbar
        field.inputView = picker
    
    
        picker.datePickerMode = .time
        picker.minuteInterval = 15
    
    }
    
    //later
    self.createDatePicker(forField: fromTextField)
    self.createDatePicker(forField: toTextField)
    

    【讨论】:

    • 对于donepressed的函数,也不能用字段变量调用吗?我收到此错误:当我尝试调用 donePressed(forField: field) 时,“'#selector' 的参数不引用 '@objc' 方法、属性或初始化程序”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多