如何根据 Swift 中的条件更改 textField 用户交互

How to change textField user-interaction according to condition in Swift

我有两个名为 toDateTextField 和 fromDateTextField 的文本字段

我的需要是 if fromDateTextField.text?.isEmpty ?? true 然后如果我点击 toDateTextField 然后它必须显示 toast 并且不应该打开 datepicker

使用此代码,如果我最初点击 toDateTextField,则日期选择器不会打开,但不会显示 toast。如果我点击 toDateTextField,最初如何显示 toast

如果我最初点击 fromDateTextField 然后它显示 toast 消息然后日期选择器出现..如何解决这两个问题

override func viewDidLoad() {
super.viewDidLoad()

toDateTextField.isEnabled = false
}


func textFieldDidBeginEditing(_ textField: UITextField) {

if fromDateTextField.text?.isEmpty ?? true {


       toDateTextField.isEnabled = false
    self.view.makeToast("Please select from date")


    } else {
       toDateTextField.isEnabled = true
}
}

//this is datpicker done button 
@objc func doneButtonPressed(_ sender: UIBarButtonItem) {

toDateTextField.isEnabled = true

let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd"
    let arr = [fromDateTextField,toDateTextField]
    let current = arr[sender.tag]
    if let datePicker = current?.inputView as? UIDatePicker {
        current?.text = dateFormatter.string(from: datePicker.date)
        current?.resignFirstResponder()
    }

}

如何解决这两个问题..请帮忙

如果您最初点击 toDateTextField 不会发生任何事情,因为您已在 viewDidLoad 方法中将其 enabled 属性 设置为 false

而且你一开始修改就会得到toast消息fromDateTextField因为它一开始是空的

要解决这个问题,您需要在 textFieldDidBeginEditing 中做一些修改,以便它检测当前正在更改的文本字段并相应地执行您想要的操作。

func textFieldDidBeginEditing(_ textField: UITextField) {
    
    if textField == toDateTextField {
        if fromDateTextField.text?.isEmpty ?? true {
            self.view.makeToast("Please select from date")
            toDateTextField.isEnabled = false
        }
    }
}

要启用 toDateTextField,您需要添加以下内容:

func textFieldDidEndEditing(_ textField: UITextField) {
    if textField == fromDateTextField {
            toDateTextField.isEnabled = true
    }
}

注意:您需要在 viewDidLoad 中将两个文本字段的 delegate 设置为 self 才能使此解决方案正常工作。