我无法在下面的代码中找到任何调用委托的方法,如果没有委托 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)
}
}
答案 0 :(得分:2)
首先,您需要将您的扩展名替换为
extension ModifiedTextField : UITextFieldDelegate{}
但是你说你做错了这个
你得到错误,因为fieldEmptyError方法可用于ModifiedTextField而不是UITextField,并且你正在调用方法为textField.fieldEmptyError(value:false)
所以你需要直接在扩展程序中调用方法
extension ModifiedTextField : UITextFieldDelegate{
func textFieldDidBeginEditing(_ textField: UITextField) {
fieldEmptyError(value: false)
}
}
不要忘记设置委托 您可以通过故事板或以编程方式执行此操作
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
}
}
}
答案 1 :(得分:1)
试试这个。我希望它可以帮助你。
class ModifiedTextField {
viewDidLoad() {
super.viewDidLoad()
yourTextField.delegate = self
}
}
extension ModifiedTextField: UITextFieldDelegate {
public func textFieldDidBeginEditing(_ textField: UITextField) {
// Your code, what happend
}
}