Swift textFieldDidChangeSelection 在 ios 12 中没有被调用

问题描述 投票:0回答:3

所以我使这个函数在 2 个文本字段达到最小文本计数时触发,将使按钮启用。

它适用于 ios 13 及更高版本,但不适用于 ios 12....我不知道它如何以及为什么不起作用

所以基本上,当我在文本字段上输入内容时,我的 textFieldDidChangeSelection 不会触发任何内容......它不适用于 ios 12,但适用于 13 以上

我尝试在 textFieldDidChangeSelection 上打印一些内容,但控制台上没有打印任何内容

这是我的代码

//这是我的功能代码

func buttonReady() {
    if phoneNumberTextField.text!.count > 8 &&   textPinTextField.text!.count == 6{
          loginButton.isUserInteractionEnabled = true
          loginButton.backgroundColor = UIColor.init(string:    COLOR_RED)
          loginButton.setTitleColor(UIColor.white, for: .normal)
          print("ahaaaa 🏌🏻")
      } else {
          loginButton.isUserInteractionEnabled = false
          loginButton.backgroundColor = UIColor.init(string: COLOR_GREY_BUTTON)
          loginButton.setTitleColor(UIColor.init(string: COLOR_GREY_TEXT), for: .normal)
          print("hmmmm 🤔")
      }
  }

我在这里使用该功能

func textFieldDidChangeSelection(_ textField: UITextField) {
    if textField == phoneNumberTextField {
        buttonReady()
        
    }
    if textField == textPinTextField {
        buttonReady()
        
    }
    
}

还有这里

override func viewDidLoad() {
    super.viewDidLoad()
    
    // Do any additional setup after loading the view.
    
    buttonReady()
    hideKeyboardWhenTappedAround()
}

我使用 SkyFloatingLabelTextFIeld 作为我的自定义文本字段

我仍然不明白为什么该 func 无法在 ios12 上运行,而它可以在 ios 13 及更高版本上运行

swift iphone xcode button textfield
3个回答
3
投票

同样的问题

你可以试试这个

    override func viewDidLoad() {
    super.viewDidLoad()
    
    // Do any additional setup after loading the view.
    phoneNumberTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    textPinTextField.addTarget(self, action: #selector(textFieldDidChange), for: .editingChanged)
    buttonReady()
    hideKeyboardWhenTappedAround()
}

    @objc func textFieldDidChange() {
    buttonReady()
}

3
投票

查看 UITextField.h,你会看到:

- (void)textFieldDidChangeSelection:(UITextField *)textField API_AVAILABLE(ios(13.0), tvos(13.0));

textFieldDidChangeSelection
仅适用于 iOS 13.0 及更高版本。


-1
投票
当您更改编辑(例如在文本字段上键入)时,不应调用

textFieldDidChangeSelection
。当您更改文本的selection时,它将被调用,例如当用户双击文本以选择整个单词或移动编辑光标时。

为了能够处理文本更改(用户编辑),正如 Chuang 所说,您可以使用

.editingChanged
 在文本字段上使用 
addTarget(_, action:, for:)

事件监听器

另一种方法是采用来自

textField(_:shouldChangeCharactersIn:replacementString:)
的委托功能
UITextFieldDelegate

另一种方法是使用 Key-Value-Observing,添加事件监听器。

对于您正在使用的功能的实际使用,您应该获取文本字段的选定范围,请参阅this

© www.soinside.com 2019 - 2024. All rights reserved.