0

有没有办法在用户按下 UITextField 上的退格键时获得通知,即使该字段为空?

当用户在空白字段上退格时,我希望能够触发一些代码。

4

4 回答 4

0

由于您不需要检测文本何时被删除,而是何时按下退格键,因此您需要做的不仅仅是实现UITextFieldDelegate

阅读这篇博文,了解如何UITextField将所有UIKeyInput方法转发到私有类UIFieldEditor。编写器在运行时动态子类UIFieldEditor化以检测这些事件。

希望这会为您指明正确的方向!

于 2012-09-04T09:27:08.623 回答
0

这将检测退格。现在你可以在按下退格键时做任何事情。

 - (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;
    }
于 2015-04-17T05:29:18.583 回答
0

我可以想出一种技术来获得你想要的东西,但它需要一些代码。本质上,始终在字符串的前面保留一个 Unicode“空格”字符。我没有带我的书,但是你可以使用一个非常薄的空间字符。

您将把大部分代码放在这里:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
  • 当字段开始编辑时,在任何字符串前面加上空格
  • 当用户追加在 shouldChangeCharactersInRange 中看到的文本时,追加它。
  • 如果用户试图删除最后一个字符或包含它的范围,则返回 NO,进行更改,然后添加回前导空格字符。
  • 当 textField 完成编辑时,删除前导空格
于 2012-09-04T11:51:09.217 回答
0
[[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyPressed:) name: UITextFieldTextDidChangeNotification object: nil];

这就是您在用户按下的每个键时收到通知的方式。然后你必须弄清楚(我认为在通知中是它的一个属性)按下了哪个键。

或者您可以使用文本字段委托功能

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string

找出按下了什么键

于 2012-09-04T08:47:09.653 回答