退格键iOS的通知
有没有办法获得用户何时按UITextField上的退格键的通知,即使该字段为空?
我希望能够在用户退出空字段时触发一些代码。
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil];
这是如何得到用户按下每个键的通知。 那么你必须弄清楚(我认为在通知中是一个属性)哪个键被按下。
或者你可以使用textfield委托function
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
弄清楚什么键被按下
我可以想到一种技术来获得你想要的东西,但是它需要一些代码。 本质上,始终在string的前面保留一个Unicode“空格”字符。 我没有我的书,但有一个非常薄的空间字符,你可以使用。
你将把大部分代码放在这里:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
- 当字段开始编辑时,用空格前缀任何string
- 当用户在shouldChangeCharactersInRange中看到附加文本时,将其追加。
- 如果用户试图删除最后一个字符或包含它的范围,则返回NO,进行更改,然后添加前导空格char。
- 当textField完成编辑时,删除前导空格
由于您不需要检测文本何时被删除,但是当按下退格键时,您需要比实现UITextFieldDelegate
多一点。
阅读这篇博客文章 ,了解UITextField
如何将所有UIKeyInput
方法转发到私有类UIFieldEditor
。 UIFieldEditor
在运行时dynamic地将UIFieldEditor
进行子类UIFieldEditor
,以检测这些事件。
希望这个指向你正确的方向!
这将检测退格。 现在当按下退格键时你可以做任何事情。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { if (textField==txtMobileNo) { const char * _char = [string cStringUsingEncoding:NSUTF8StringEncoding]; int isBackSpace = strcmp(_char, "\b"); if (isBackSpace == -8) { NSLog(@"isBackSpace"); if (textField.text.length == 9) { } return YES; // is backspace } else if (textField.text.length == 10) { return YES; } } return NO; }