我正在寻找有关如何捕获退格事件的解决方案,大多数堆栈溢出答案都在Objective-C中,但是我需要使用Swift语言。
首先,我为UITextField设置了委托,并将其设置为self
self.textField.delegate = self;
然后,我知道使用shouldChangeCharactersInRange
委托方法来检测是否按下了退格键,因为所有代码都在Objective-C中。我需要在Swift中使用以下方法。
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding];
int isBackSpace = strcmp(_char, "\b");
if (isBackSpace == -8) {
// NSLog(@"Backspace was pressed");
}
return YES;
}
斯威夫特4.2
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
if let char = string.cString(using: String.Encoding.utf8) {
let isBackSpace = strcmp(char, "\\b")
if (isBackSpace == -92) {
print("Backspace was pressed")
}
}
return true
}
较早的Swift版本
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
}
此委托方法不会被触发。委托是在
viewDidLoad()
方法中设置的。-1:此代码有效,但偶然。该文档指定
string
如果用户删除一个或多个字符,它将是一个空字符串。@gbk检查此链接stackoverflow.com/questions/1977934/… 即使TextField为空也可以检测到退格。
这个答案很危险,应该避免。strcmp的特定返回值(除了其符号)是没有意义的。字符串为空,不是
\b
。