我有这个功能,但问题是我不知道如何在super.viewDidLoad
上调用此函数
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if let text = namaTextField.text {
if let floatingLabelTextField = textField as? SkyFloatingLabelTextField {
if(text.characters.count < 3 || !text.contains("@")) {
floatingLabelTextField.errorMessage = "Invalid email"
}
else {
// The error message will only disappear when we reset it to nil or empty string
floatingLabelTextField.errorMessage = ""
}
}
}
return true
}
答案 0 :(得分:0)
它是textField Delegate方法,每次当你尝试在TextField中更改文本时,此方法在更改之前调用,因此可以选择是否进行更改。
根据我的经验,你不能自己打电话。
答案 1 :(得分:0)
这看起来像UITextFieldDelegate
的委托方法。您的视图控制器类应符合UITextFieldDelegate
。
VC不应该调用文本字段委托方法。它们应该由文本字段调用。
这种特殊方法要求您“我应该将此范围的文本更改为此替换字符串吗?”并且在方法中你做了一些逻辑并返回true
(你回答“是”)。
只要文本字段的当前文本发生变化,就会调用此方法,询问“这部分文本是否真的会发生变化?”。
文本字段将调用此方法,因此不必担心它。您应该做的唯一事情是将self
设置为delegate
:
namaTextField.delegate = self