【问题标题】:How to disable DatePicker interaction(for selecting date) for one textfield in swift"如何在 swift 中为一个文本字段禁用 DatePicker 交互(用于选择日期)“
【发布时间】:2021-10-22 05:37:18
【问题描述】:

我在 fromDateTftoDateTf 文本字段中使用datePicker。现在我需要禁用 toDateTf 的日期选择器交互(意味着不应选择日期)如果 fromDateTf textfield 文本为空.. 怎么办?

日期选择器

let screenWidth = UIScreen.main.bounds.width

let datePicker = UIDatePicker(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 216))


class PostServiceRequestVC: UIViewController, UITextViewDelegate {


@IBOutlet weak var toDateTf: UITextField!
@IBOutlet weak var fromDateTf: UITextField!


 override func viewDidLoad() {
    super.viewDidLoad()

    fromDateTf.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed), tag: 0)
    toDateTf.addInputViewDatePicker(target: self, selector: #selector(doneButtonPressed), tag: 1)
            
    
}


@objc func doneButtonPressed(_ sender: UIBarButtonItem) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let arr = [fromDateTf,toDateTf]
    
    let current = arr[sender.tag]
    if let datePicker = current?.inputView as? UIDatePicker {
        current?.text = dateFormatter.string(from: datePicker.date)
        
        current?.resignFirstResponder()
    }
            
}



extension UITextField {

func addInputViewDatePicker(target: Any, selector: Selector, tag: Int) {
    

    datePicker.datePickerMode = .date
    self.inputView = datePicker
    
    if #available(iOS 13.4, *) {
        datePicker.preferredDatePickerStyle = .wheels
        datePicker.sizeToFit()
    }
    let todaysDate = Date()

    datePicker.minimumDate = todaysDate
    
    let toolBar = UIToolbar(frame: CGRect(x: 0, y: 0, width: screenWidth, height: 44))
    let flexibleSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let cancelBarButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelPressed))
    let doneBarButton = UIBarButtonItem(title: "Done", style: .plain, target: target, action: selector)
    toolBar.setItems([cancelBarButton, flexibleSpace, doneBarButton], animated: false)

    doneBarButton.tag = tag
    
    self.inputAccessoryView = toolBar
}

@objc func cancelPressed() {
    self.resignFirstResponder()
}
}

使用上面的代码,我可以为两个文本字段选择日期.. 但是

这里的 fromDateTf.text 是空的,所以想禁用 toDateTf 的日期选择器的交互

我希望用户首先选择 fromdate.. 没有 fromdate 我不想授予选择 todate 的访问权限如何?...请帮助我

编辑:根据下面的答案,如果我在viewDidLoad 中添加该代码,那么toDateTf 一直阻止我显示日期选择器并选择日期

所以我在doneButtonPressed 中添加了该代码,所以在这里我第一次可以显示日期选择器并选择日期.. 但是从第二次开始,如果fromDateTf 为空,则可以工作.. 但它不工作第一次..第一次如果fromDateTf为空,那么toDateTf.isEnabled = false应该可以工作..如何实现请帮忙。

   @objc func doneButtonPressed(_ sender: UIBarButtonItem) {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let arr = [fromDateTf,toDateTf]

    let current = arr[sender.tag]
    if let datePicker = current?.inputView as? UIDatePicker {

        if fromDateTf.text?.isEmpty ?? true {

               toDateTf.isEnabled = false
            
            } else {
               toDateTf.isEnabled = true
        }
        current?.text = dateFormatter.string(from: datePicker.date)

        current?.resignFirstResponder()
    }

}

【问题讨论】:

    标签: swift datepicker textfield


    【解决方案1】:

    您可以创建一个函数来检查 fromDateTf 是否为空,并相应地调整 UI:

    func checkForText() {
    
         if fromDateTF.text == "" { //you can also use .isEmpty if you'd rather
    
            toDateTf.isEnabled = false 
    
         } else {
    
            toDateTf.isEnabled = true
    
         }
    

    然后,您可以在 ViewDidLoad 中调用此函数,并在随后使用文本框更改任何内容时调用此函数。添加它的 else 部分是个好主意,这样当您填写 fromDateTf 时,它会重新启用另一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多