我有四个textField
,每个只占一个字符,类似于锁定屏幕。我可以输入并从textField
移动到下一个textField
问题是当我想要删除并移至上一个textField
时,我不知道何时点击删除按钮。
我正在使用:
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool
输入并从一个textField
移动到另一个。{/ p>
如何知道何时按下删除键?
答案 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
您需要将每个文本字段连接到IBAction(使用已发送的事件编辑已更改)
视图控制器代码应如下所示:
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
}