如何知道单击十进制小键盘上的删除按钮的时间

时间:2015-04-28 06:55:46

标签: ios swift uitextfielddelegate

我有四个textField,每个只占一个字符,类似于锁定屏幕。我可以输入并从textField移动到下一个textField 问题是当我想要删除并移至上一个textField时,我不知道何时点击删除按钮

我正在使用:

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

输入并从一个textField移动到另一个。{/ p>

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

5 个答案:

答案 0 :(得分:2)

UITextField的子类如下:

import UIKit

class MyTextField: UITextField {
    override func deleteBackward() {
        super.deleteBackward()

        println("Delete button was tapped")
    }
}

然后将文本字段的类更改为MyTextField。应该这样做!

答案 1 :(得分:2)

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

cv

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

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

}

和你的方法:

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

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

enter image description here

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

enter image description here

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

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()
    }
}

答案 2 :(得分:0)

对类似的问题有可能的解决方案in this answer。您可以继承UITextField,然后在子类中重写此方法:

(BOOL)keyboardInputShouldDelete:(UITextField *)textField

此代码在Objective-C中的事件,它应该显示正确使用此方法。

答案 3 :(得分:0)

在函数中使用replacementString来了解UItextField中发生的事情

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if (string.length == 0) {
        //delete
    } else {
        //any other key
    }

    return YES;
}

答案 4 :(得分:0)

我希望我的回答可以帮到你:

func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
    let  char = string.cStringUsingEncoding(NSUTF8StringEncoding)!
    let isBackSpace = strcmp(char, "\\b")

    if (isBackSpace == -92) {
        println("Backspace was pressed")
    }

    return true
}