ตัวจัดการที่ครอบคลุมสำหรับช่องข้อความที่มีตัวเลขหลักเดียวสำหรับSwift 5.1 :
- สมมติว่าคุณมีคอลเลคชัน textFields ทางออก (พร้อมกับผู้รับมอบสิทธิ์ที่เกี่ยวข้องด้วย)
 
1 ขั้นตอน
protocol MyTextFieldDelegate: class {
    func textField(_ textField: UITextField, didDeleteBackwardAnd wasEmpty: Bool) 
}
final class MyTextField: UITextField {
    weak var myDelegate: MyTextFieldDelegate?
    override func deleteBackward() {
        let wasEmpty = text == nil || text == ""
        // then perform normal behavior
        super.deleteBackward()
        // now, notify delegate (if existent)
        (delegate as? MyTextFieldDelegate)?.textField(self, didDeleteBackwardAnd: wasEmpty)
    }
}
2 ขั้นตอน
final class ViewController: UIViewController {
    @IBOutlet private var textFields: [MyTextField]!
    override func viewDidLoad() {
        super.viewDidLoad()
        textFields.forEach {
            $0.delegate = self
            $0.myDelegate = self
        }
    }
}
3 ขั้นตอน
extension ViewController: UITextFieldDelegate, MyTextFieldDelegate {
    func textFieldHasChanged(with text: String, _ tag: Int, for textField: UITextField) {
        textField.text = text
        if let someTextField = (textFields.filter { $0.tag == tag }).first {
            someTextField.becomeFirstResponder()
        } else {
            view.endEditing(true)
        }
    }
    func textField(_ textField: UITextField, didDeleteBackwardAnd wasEmpty: Bool) {
        // If the user was pressing backward and the value was empty, go to previous textField
        textFieldHasChanged(with: "", textField.tag - 1, for: textField)
    }
    func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
        // Restrict to only digits
        let aSet = NSCharacterSet(charactersIn: "0123456789").inverted
        let compSepByCharInSet = string.components(separatedBy: aSet)
        let numberFiltered = compSepByCharInSet.joined(separator: "")
        guard string == numberFiltered, let text = textField.text else { return false }
        if text.count >= 1 && string.isEmpty {
            // If the user is deleting the value
            textFieldHasChanged(with: "", textField.tag - 1, for: textField)
        } else {
            textFieldHasChanged(with: string, textField.tag + 1, for: textField)
        }
        return false
    }
}