UITextfield 类快速调用委托方法

Posted

技术标签:

【中文标题】UITextfield 类快速调用委托方法【英文标题】:UITextfield Class to call delegate methods in swift 【发布时间】:2018-11-12 07:20:15 【问题描述】:

我已经根据我的应用程序 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


还有其他方法可以做类似的事情吗?

【问题讨论】:

【参考方案1】:

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

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

delegate = self

【讨论】:

在课堂上添加委托=自我;调用类委托方法,但避免调用对于所有类都不相似的视图控制器的委托方法。因此可以调用任何类委托方法或 ViewController 的。是否有任何逃生窗口,以便我可以从它们中调用委托方法? 正如 Stas Baranovskiy 所写,您不能同时设置两个不同的委托对象【参考方案2】:

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

【讨论】:

另外你不能同时设置两个不同的委托对象。 IE。为您设置自定义文本字段类仅处理一个委托函数,您的视图控制器处理其余部分。为此,您必须“代理”委托回调。我还建议您阅读以下主题 - ***.com/questions/32542362/…

以上是关于UITextfield 类快速调用委托方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XIB 中调用 UITextField 的委托方法?

如何在不同的 Objective-C 类中调用 UITextField 委托方法?

将 UITextField 添加到 UITableViewCell

UIAlertController 实用程序类无法调用 UITextField 委托或目标,但在 UIViewController 中工作

自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用

UIView 类中的 Swift 集合视图委托