Swift为粘贴操作UITextField添加目标

时间:2017-03-27 19:00:16

标签: swift swift3 uitextfield uicontrolevents

我有一个UITextField,它添加了一个目标,在用户输入时对该字段执行检查。我目前有一个问题,但是当我的代码在文本字段中添加文本时,文本没有被检查。有没有办法可以通过.editingChanged解决这个问题,还是有另一个UIControlEvent可以挂钩?

代码是:

NumberOutlet.addTarget(self, action: #selector(handleNumberImage), for: .editingChanged)

3 个答案:

答案 0 :(得分:1)

您可以通过在viewcontroller中实现UITextViewDelegate协议来实现此目的。在viewDidLoad中,您需要将UITextField的代理设置为self

然后,只需实现以下方法,如演示here

func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    if string.length > 1 {
        // Text was pasted into the text field

        // do something with pasted text
    } else {
        //typed string
    }
    return true
}

答案 1 :(得分:0)

您需要符合UITextFieldDelegate协议。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
    let isAddingCharacter: Bool = range.location >= 0 && range.length == 0
    let isDeletingCharacter: Bool = range.location >= 0 && range.length == 1
    var newCount: Int = textView.text.characters.count
    if isAddingCharacter {
        newCount += 1
    } else if isDeletingCharacter {
        newCount -= 1
    }
    // If the newCount is > 0, the user is entering text
    return true
}

旁注,您的插座应命名为numberOutlet,而不是NumberOutlet。通常在swift中使用驼峰案例语法来表示变量名。

答案 2 :(得分:0)

我知道的唯一方法就是在通过代码添加文本后调用您用作选择器的方法。

例如,您有一个按下按钮后执行的方法,并且您在文本字段中添加了文本,并且此处不会触发UIControlEvent。因此,在按下按钮后,只需在此示例中通过代码添加文本后调用该方法:

@IBAction func buttonPressed(_ sender: UIButton) {
  // Note: camel case convention
  numberOutlet.text?.append("added text via code")
  // perform your check method
  handleNumberImage()
}