【问题标题】:How can I override a Swift delegate method to take more parameters?如何覆盖 Swift 委托方法以获取更多参数?
【发布时间】:2019-07-29 21:08:44
【问题描述】:

我有一个带有 3 个 UITextField 的表单。当用户在该特定字段中输入文本后,我想验证每个字段的用户输入。现在,我有一个方法

validateAllFields()

我打电话来的:

func textFieldDidEndEditing(_ textField: UITextField) {
    self.validateAllFields()
}

我宁愿在修改文本后验证单个字段,而不是在修改每个字段后验证所有字段。

有没有办法覆盖委托方法或扩展 UITextField 以获取更多参数?比如:

override func textFieldDidEndEditing(_ textField: UITextField,
                       textFieldIdentifier: TextFieldIdentifierEnum) {
    self.validate(textField: textField, basedOn: textFieldIdentifier)
}

我怀疑可以通过扩展来完成,但我不清楚如何进行。

感谢您的帮助!

【问题讨论】:

  • 您无法添加更多参数。而且没有必要。您已被告知哪个文本字段受到影响。

标签: ios swift cocoa-touch uikit


【解决方案1】:

您不必因为参数(_ textField: UITextField) 为您提供用户更改的当前文本字段

假设你有

@IBOutlet weak var emailTexf:UITextField!
@IBOutlet weak var passTexf:UITextField!

func textFieldDidEndEditing(_ textField: UITextField) {
  self.validateAllFields(textField)
}
fun validateAllFields(_ current:UITextField) {

   if  emailTexf == current {

   }
   else if passTexf == current {

   } 
   else {  }  // etc
}

【讨论】:

  • 当然,这是有道理的。我如何区分它们?在您的示例中,您使用“emailTexf”和“passTexf”,但是您从哪里得到这些?如果您能帮助我澄清这一点,很高兴投票并选择此作为答案。谢谢!
  • 你需要用你自己的变量替换它们,上面是一个例子
  • 你能举一个更完整的例子来解释你在说什么吗?对不起,我不明白。谢谢!
  • 假设您有用于验证文本字段的渠道,请参阅编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
  • 1970-01-01
  • 2014-08-18
相关资源
最近更新 更多