【问题标题】:SWIFT: Extension for UITextField that doesn't accept whitespace as inputSWIFT:不接受空格作为输入的 UITextField 扩展
【发布时间】:2016-06-14 01:28:46
【问题描述】:

我知道UITextFieldDelegate 上的shouldChangeTextInRange 方法可以过滤UITextField 上的输入,如果我只需要过滤一个UITextField 就可以了。现在我的问题是我有很多UITextField 需要过滤空格。而且我不想在每个包含UITextFieldUIViewController 上实现shouldChangeTextInRange。有没有办法扩展 UITextField 或其他?

【问题讨论】:

    标签: ios swift uitextfield


    【解决方案1】:

    其实这很简单,只是继承UITextField,给它添加委托,然后在那里实现shouldChangeTextInRange

    class CustomTextField: UITextField, UITextFieldDelegate {
      override func awakeFromNib() {
        super.awakeFromNib()
    
        delegate = self
      }
    
      func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
        if (string.rangeOfCharacterFromSet(.whitespaceCharacterSet()) != nil) {
          return false
        } else {
          return true
        }
      }
    }
    

    【讨论】:

    • 这有一个严重的缺陷——不支持其他验证。如果您在单个视图控制器上需要多个 BackspaceAcceptedTextField(顺便说一句,这是一个奇怪的名称),并且每个应该只接受一定数量(但不同)的字符怎么办?
    • 对不起这个名字,我只是从我上一个项目中复制这个答案,大声笑,让我改变这个名字。问题很简单,F. Suyuti 想要一个不接受空格的UITextField,他不想在每个viewController 上实现它。如果您需要对某些 ​​viewController 进行更多过滤,那么您需要对其进行覆盖。
    【解决方案2】:

    Swift 也允许扩展 protocols。您可以创建一个extension UITextFieldDelegate 并在该方法中实现您的自定义代码。但是有一些限制,检查这个答案,它会帮助你swift 2.0 - UITextFieldDelegate protocol extension not working

    【讨论】:

    • 谢谢,让我学习一下,找到后我会更新我的问题。
    猜你喜欢
    • 2016-08-22
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多