我们可以在UITextField的扩展中调用delegate

时间:2018-01-26 08:01:24

标签: ios swift uitextfield uitextfielddelegate

我无法在下面的代码中找到任何调用委托的方法,如果没有委托 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)
}


}

2 个答案:

答案 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
    }
}