我根据我的应用程序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
}
}
还有其他类似方法吗?
答案 0 :(得分:2)
您没有设置文本字段委托。
将此行添加到您的configure()函数中:
delegate = self
答案 1 :(得分:1)
根据您共享的代码,我可以说未调用UITextFieldDelegate的函数textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool
,因为未设置委托对象。