同一视图中两个 UITextField 的不同条件

Different conditions for two UITextField in same View

我在同一个视图中有两个 UITextFields,我希望每个都有特定的条件。第一个只需要接受 42 个字符长字符串,第二个只需要接受 0123456789.

我使用 textField(_:shouldChangeCharactersIn:replacementString:) 设置了第一个文本字段,但如何设置第二个文本字段而不同时满足这两个条件?

文本字段:

@IBOutlet weak var firstTextField: UITextField!
@IBOutlet weak var secondTextField: UITextField!

第一个 TextField 条件:

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    guard let text = textField.text else { return true }
    let newLength = text.count + string.count - range.length
    return newLength == 42
}

第二个 TextField 条件?

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    let aSet = NSCharacterSet(charactersIn:".0123456789").inverted
    let compSepByCharInSet = string.components(separatedBy: aSet)
    let numberFiltered = compSepByCharInSet.joined(separator: "")
    return string == numberFiltered
}

我不能使用 textField(_:shouldChangeCharactersIn:replacementString:) 两次,我可以这样做吗?

一样简单使用
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
 if textField == firstTextField{ // its Identify your textfield
   guard let text = textField.text else { return true }
let newLength = text.count + string.count - range.length
 return newLength == 42
 }else{
  let aSet = NSCharacterSet(charactersIn:".0123456789").inverted
let compSepByCharInSet = string.components(separatedBy: aSet)
let numberFiltered = compSepByCharInSet.joined(separator: "")
return string == numberFiltered
 }
return true
}