我无法在下面的代码中找到调用委托(delegate)的任何方法,如果没有委托(delegate),则无法调用 textFieldDidBeginEditing 方法
import UIKit
class ModifiedTextField: UITextField { }
extension UITextField: UITextFieldDelegate{
func fieldEmptyError(value: Bool){
let textFieldVal = "\(self.placeholder!)"
if (value){
layer.borderColor = UIColor.red.cgColor
layer.cornerRadius = 5.0
layer.masksToBounds = true
layer.borderWidth = 1
pulsate()
textFieldOrigVal(string: textFieldVal, borderColor: UIColor.red)
}else {
textFieldOrigVal(string: textFieldVal, borderColor: UIColor.lightGray)
layer.borderWidth = 0.2
layer.borderColor = UIColor.lightGray.cgColor
}
}
public func textFieldDidBeginEditing(_ textField: UITextField) {
textField.fieldEmptyError(value: false)
}
}
最佳答案
首先你需要将你的扩展替换为
extension ModifiedTextField : UITextFieldDelegate{}
但是你说这样做会出错
您收到错误消息是因为 fieldEmptyError 方法可用于 ModifiedTextField 而不是 UITextField,并且您将方法调用为 textField.fieldEmptyError(value: false)
所以你需要直接在你的扩展中调用方法
extension ModifiedTextField : UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
fieldEmptyError(value: false)
}
}
并且不要忘记设置委托(delegate) 您可以通过 Storyboard或以编程方式完成
override func awakeFromNib() {
delegate = self
}
所以最后你的整个代码看起来像这样
import UIKit
class ModifiedTextField: UITextField {
override func awakeFromNib() {
delegate = self
}
}
extension ModifiedTextField : UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
fieldEmptyError(value: false)
}
func fieldEmptyError(value: Bool){
let textFieldVal = "\(self.placeholder!)"
if (value){
layer.borderColor = UIColor.red.cgColor
layer.cornerRadius = 5.0
layer.masksToBounds = true
layer.borderWidth = 1
pulsate()
textFieldOrigVal(string: textFieldVal, borderColor: UIColor.red)
}else {
textFieldOrigVal(string: textFieldVal, borderColor: UIColor.lightGray)
layer.borderWidth = 0.2
layer.borderColor = UIColor.lightGray.cgColor
}
}
}
关于ios - 我们可以在 UITextField 的扩展中调用委托(delegate)吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457593/