当UITextField成为第一响应者时,如何知道删除键是如何知道的?

时间:2018-05-31 09:11:14

标签: uitextfield uitextfielddelegate

我已经搜索了答案,这都是关于使用UITextFieldDelegate的shouldChangeCharactersInRange函数。它适用于大多数情况。但是如果UITextField已经为空,单击“删除”按钮时不再调用shouldChangeCharactersInRange方法。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

这可以使用多种方法完成(不是直接的!)。一种方法是在其上放置一个隐形按钮,或者通过子类化UITextField并将其添加为所需文本字段的自定义类。然后覆盖方法deleteBackward。此方法将捕获所有退格事件。

子类UITextField

// MyTextField.swift

import UIKit

protocol MyTextFieldDelegate {
    func textFieldDidDelete()
}

class MyTextField: UITextField {

    var myDelegate: MyTextFieldDelegate?

    override func deleteBackward() {
        super.deleteBackward()
        myDelegate?.textFieldDidDelete()
    }

}

<强>实施

// ViewController.swift

import UIKit

class ViewController: UIViewController, MyTextFieldDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        // initialize textField
        let input = MyTextField(frame: CGRect(x: 50, y: 50, width: 150, height: 40))

        // set viewController as "myDelegate"
        input.myDelegate = self

        // add textField to view
        view.addSubview(input)

        // focus the text field
        input.becomeFirstResponder()
    }

    func textFieldDidDelete() {
        print("delete")
    }

}