不在 UITextField 自定义子类中调用的委托方法
Delegate methods not calling in UITextField custom subclass
我正在从 UITextField class 创建自定义子 class。我想在文本字段聚焦时应用一些东西。但是在我的自定义 class 中,我的委托方法没有调用。
我创建了一个扩展 UITextField class 的子class 并进行了一些自定义。
在 TGTextField 中 class:
class TGTextField: UITextField, UITextFieldDelegate {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
delegate = self
createBorder()
}
required override init(frame: CGRect) {
super.init(frame: frame)
delegate = self
createBorder()
}
func createBorder(){
self.layer.borderColor = AppColor.TextFieldColors.BorderNormalColor.cgColor
self.layer.borderWidth = 1.0;
self.layer.cornerRadius = 8
}
func textFieldDidBeginEditing(textField: UITextField) {
print("focused")
self.activeTextFieldColor()
}
func textFieldDidEndEditing(textField: UITextField) {
print("lost focus")
self.deactiveTextFieldColor()
}
func activeTextFieldColor(){
self.layer.borderColor = AppColor.TextFieldColors.BorderActiveColor.cgColor
}
func deactiveTextFieldColor(){
self.layer.borderColor = AppColor.TextFieldColors.BorderNormalColor.cgColor
}
}
这两个委托方法都没有被调用。
func textFieldDidBeginEditing(textField: UITextField) {
print("focused")
self.activeTextFieldColor()
}
func textFieldDidEndEditing(textField: UITextField) {
print("lost focus")
self.deactiveTextFieldColor()
}
看起来您正在实施错误的方法签名;你应该把 _
放在 textField
之前,像这样
func textFieldDidBeginEditing(_ textField: UITextField) {}
func textFieldDidEndEditing(_ textField: UITextField) {}
Xcode 应该可以帮助您突出显示警告
Instance method 'textFieldDidBeginEditing(textField:)' nearly matches optional requirement 'textFieldDidBeginEditing' of protocol 'UITextFieldDelegate'
你的代码适合我。如果在初始化文本字段后将文本字段委托设置为相应的视图控制器,则不会调用自定义 class 中的这些委托方法。
为了避免在 TGTextField
而不是 UITextFieldDelegate
中添加目标
class TGTextField: UITextField {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
//delegate = self
createBorder()
}
required override init(frame: CGRect) {
super.init(frame: frame)
//delegate = self
createBorder()
}
func createBorder(){
self.layer.borderColor = UIColor.red.cgColor
self.layer.borderWidth = 1.0;
self.layer.cornerRadius = 8
addTarget(self, action: #selector(activeTextFieldColor), for: .editingDidBegin)
addTarget(self, action: #selector(deactiveTextFieldColor), for: .editingDidEnd)
}
@objc func activeTextFieldColor(){
self.layer.borderColor = UIColor.green.cgColor
}
@objc func deactiveTextFieldColor(){
self.layer.borderColor = UIColor.red.cgColor
}
}
我正在从 UITextField class 创建自定义子 class。我想在文本字段聚焦时应用一些东西。但是在我的自定义 class 中,我的委托方法没有调用。
我创建了一个扩展 UITextField class 的子class 并进行了一些自定义。
在 TGTextField 中 class:
class TGTextField: UITextField, UITextFieldDelegate {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
delegate = self
createBorder()
}
required override init(frame: CGRect) {
super.init(frame: frame)
delegate = self
createBorder()
}
func createBorder(){
self.layer.borderColor = AppColor.TextFieldColors.BorderNormalColor.cgColor
self.layer.borderWidth = 1.0;
self.layer.cornerRadius = 8
}
func textFieldDidBeginEditing(textField: UITextField) {
print("focused")
self.activeTextFieldColor()
}
func textFieldDidEndEditing(textField: UITextField) {
print("lost focus")
self.deactiveTextFieldColor()
}
func activeTextFieldColor(){
self.layer.borderColor = AppColor.TextFieldColors.BorderActiveColor.cgColor
}
func deactiveTextFieldColor(){
self.layer.borderColor = AppColor.TextFieldColors.BorderNormalColor.cgColor
}
}
这两个委托方法都没有被调用。
func textFieldDidBeginEditing(textField: UITextField) {
print("focused")
self.activeTextFieldColor()
}
func textFieldDidEndEditing(textField: UITextField) {
print("lost focus")
self.deactiveTextFieldColor()
}
看起来您正在实施错误的方法签名;你应该把 _
放在 textField
之前,像这样
func textFieldDidBeginEditing(_ textField: UITextField) {}
func textFieldDidEndEditing(_ textField: UITextField) {}
Xcode 应该可以帮助您突出显示警告
Instance method 'textFieldDidBeginEditing(textField:)' nearly matches optional requirement 'textFieldDidBeginEditing' of protocol 'UITextFieldDelegate'
你的代码适合我。如果在初始化文本字段后将文本字段委托设置为相应的视图控制器,则不会调用自定义 class 中的这些委托方法。
为了避免在 TGTextField
而不是 UITextFieldDelegate
class TGTextField: UITextField {
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)!
//delegate = self
createBorder()
}
required override init(frame: CGRect) {
super.init(frame: frame)
//delegate = self
createBorder()
}
func createBorder(){
self.layer.borderColor = UIColor.red.cgColor
self.layer.borderWidth = 1.0;
self.layer.cornerRadius = 8
addTarget(self, action: #selector(activeTextFieldColor), for: .editingDidBegin)
addTarget(self, action: #selector(deactiveTextFieldColor), for: .editingDidEnd)
}
@objc func activeTextFieldColor(){
self.layer.borderColor = UIColor.green.cgColor
}
@objc func deactiveTextFieldColor(){
self.layer.borderColor = UIColor.red.cgColor
}
}