ios - 我们可以在 UITextField 的扩展中调用委托(delegate)吗

标签 ios swift uitextfield uitextfielddelegate

我无法在下面的代码中找到调用委托(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/

相关文章:

当我设置新字体时,iOS 导航栏不改变颜色

ios - tapGestureRecognizer 在 UIScrollView Swift 上不触发 Action

编辑时iOS UITextField未清除

ios - 具有企业帐户的 IPA 在安装时显示警告消息

ios - 如何通过 popViewController Animated for Swift 发回数据?

ios - 核心数据插入和保存缓慢

ios - UIPageViewController 空白屏幕

swift - 从swift设置查找器标签?

IOS 电池容量信息

ios - 将 UITextField 添加到 UIToolbar 不起作用