UITextfield类以快速调用委托方法

时间:2018-11-12 07:20:15

标签: swift uitextfielddelegate

我根据我的应用程序UI定制了一个自定义UITextfield类。但是我希望将某些委托方法包含在类中,因此不需要在所有类中都编写它们。

open class SAIconTextField: SkyFloatingLabelTextFieldWithIcon {

required public init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    configure()
}

/// Override init method
override init(frame: CGRect) {
    super.init(frame: frame)
    configure()
}

/// Override layoutSubviews method
override open func layoutSubviews() {
    super.layoutSubviews()
}

///  This method is used to set general UI
func configure() {
    self.tintColor = UIColor.appBlue
    self.selectedTitleColor = .appBlue
    self.selectedLineColor = .appBlue
    self.selectedLineHeight = 0.5

    self.iconColor = .lightGray
    self.iconImageView.tintColor = .lightGray
    self.selectedIconColor = .appBlue
    self.iconMarginBottom = 7.0
    //        self.iconMarginLeft = 2.0
    self.errorColor = .errorColor
}
}

我扩展了我的类,以执行委托方法,以便所有文本字段都可以防止在我的应用程序中输入表情符号,但不会调用该方法。

// MARK: - UITextFieldDelegate
extension SAIconTextField: UITextFieldDelegate {

/// Delegate method
public func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if textField.textInputMode?.primaryLanguage == "emoji" || !((textField.textInputMode?.primaryLanguage) != nil) {
        return false
    }
    return true
}
}

还有其他类似方法吗?

2 个答案:

答案 0 :(得分:2)

您没有设置文本字段委托。

将此行添加到您的configure()函数中:

delegate = self

答案 1 :(得分:1)

根据您共享的代码,我可以说未调用UITextFieldDelegate的函数textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool,因为未设置委托对象。