如何知道单击十进制小键盘上的删除按钮的时间 [英] How to know when the delete button on decimal pad is clicked

查看:90
本文介绍了如何知道单击十进制小键盘上的删除按钮的时间的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有四个 textField s,每个只占一个字符,类似于锁定屏幕。我可以输入并从一个 textField 移动到下一个 textField

问题出在我想要的时候要删除并移至上一个 textField ,我不知道何时单击删除按钮

I have four textFields and each takes only one character, similar to the lock screen. I can input and move from one textField to next textField.
Problem is when I want to delete and move to previous textField, I don't know when the delete button is clicked.

我正在使用:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool

从一个 textField 输入和移动另一个。

to input and move from one textField to another.

如何知道何时按下删除键?

How do I know when the delete key is pressed?

推荐答案

跟进Istvan的回答,你需要在按下deleteBackward时发布通知:

Following up Istvan answer, you need to post a notification when the deleteBackward is pressed:

class DigitField: UITextField {
    override func deleteBackward() {
        super.deleteBackward()
        NSNotificationCenter.defaultCenter().postNotificationName("deletePressed", object: nil)
    }

}

然后在viewDidLoad()中添加一个观察者,如下所示:

Then inside viewDidLoad() you add an observer as follow:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "goPrevious", name: "deletePressed", object: nil)

和您的方法:

func goPrevious() {
    if secondDigit.isFirstResponder() {
        secondDigit.enabled = false
        firstDigit.enabled = true
        firstDigit.becomeFirstResponder()
    } else if thirdDigit.isFirstResponder() {
        thirdDigit.enabled = false
        secondDigit.enabled = true
        secondDigit.becomeFirstResponder()
    } else if fourthDigit.isFirstResponder() {
        fourthDigit.enabled = false
        thirdDigit.enabled = true
        thirdDigit.becomeFirstResponder()
    }
}

选择您的文本字段并将其连接到您的DigitField

Select your text field and connect it to your DigitField

您需要将每个文本字段连接到IBAction(使用已发送的事件编辑更改)

You need to connect each text field to an IBAction (using sent events editing changed)

视图控制器代码应如下所示:

The view controller code should look like this:

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var firstDigit: UITextField!
    @IBOutlet weak var secondDigit: UITextField!
    @IBOutlet weak var thirdDigit: UITextField!
    @IBOutlet weak var fourthDigit: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "goPrevious", name: "deletePressed", object: nil)

        firstDigit.secureTextEntry = true
        secondDigit.secureTextEntry = true
        thirdDigit.secureTextEntry = true
        fourthDigit.secureTextEntry = true

        firstDigit.keyboardType = .DecimalPad
        secondDigit.keyboardType = .DecimalPad
        thirdDigit.keyboardType = .DecimalPad
        fourthDigit.keyboardType = .DecimalPad

        firstDigit.becomeFirstResponder()
        secondDigit.enabled = false
        thirdDigit.enabled = false
        fourthDigit.enabled = false
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func goPrevious() {
        if secondDigit.isFirstResponder() {
            secondDigit.enabled = false
            firstDigit.enabled = true
            firstDigit.becomeFirstResponder()
        } else if thirdDigit.isFirstResponder() {
            thirdDigit.enabled = false
            secondDigit.enabled = true
            secondDigit.becomeFirstResponder()
        } else if fourthDigit.isFirstResponder() {
            fourthDigit.enabled = false
            thirdDigit.enabled = true
            thirdDigit.becomeFirstResponder()
        }
    }
    // You need to connect each text field to an IBAction (using sent events editing changed) – 
    @IBAction func firstChanged(sender: UITextField) {
        if let digitOne = sender.text.toInt() {
            println(digitOne)
            sender.enabled = false
            secondDigit.enabled = true
            secondDigit.becomeFirstResponder()
        } else {
            sender.text = ""
        }
    }

    @IBAction func secondChanged(sender: UITextField) {
        if let digitTwo = sender.text.toInt() {
            println(digitTwo)
            sender.enabled = false
            thirdDigit.enabled = true

            thirdDigit.becomeFirstResponder()
        } else {
            sender.text = ""
        }
    }

    @IBAction func thirdChanged(sender: UITextField) {
        if let digitThree = sender.text.toInt() {
            println(digitThree)
            sender.enabled = false
            fourthDigit.enabled = true
            fourthDigit.becomeFirstResponder()
        } else {
            sender.text = ""
        }
    }

    @IBAction func fourthChanged(sender: UITextField) {
        if let digitFour = sender.text.toInt() {
            println(digitFour)
            sender.enabled = false
        } else {
            sender.text = ""
        }
    }
}

这篇关于如何知道单击十进制小键盘上的删除按钮的时间的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆