在UITextField中解决Bug:当它为空时,按退格键不会触发正确的功能

时间:2011-08-26 14:09:27

标签: objective-c ios ipad uitextfield uitextfielddelegate

男人,我不相信这对我来说是个问题。如果我按下键盘上的某个键,UITextField委托会触发该功能:

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
       if ([string lenght]==0) NSLog("Backspace was pressed");
 }

但问题是:当文本为空并按下退格键时,此函数IS NOT被调用。在这种情况下有一种方法可以检测到退格被按下了吗?

或者我必须将此错误发送给Apple?

聚苯乙烯。我需要这个光标转到上一个UITextFild(如果有一个字符并按退格键,它可以工作)

2 个答案:

答案 0 :(得分:1)

嗯,我不认为这是一个错误,因为textfield是空的,因此在范围内没有更改任何字符,因此该方法没有被触发。 Apple的UITextFieldDelegate Documentation说:

  

只要用户在文本字段中键入新字符或删除现有字符,文本字段就会调用此方法。

TextField中没有现有字符,因此不会触发该方法。它没有帮助回答这个问题,但它不是SDK中的错误

要获得您想要的行为,此问题已在此处得到解答:Can I detect the delete key even if the UITextField is empty?

答案 1 :(得分:0)

实际上这不是错误。这里的委托方法没有捕获事件,因为textfield的任何值都没有变化。

这可以通过继承UITextField并将其添加为所需文本字段的自定义类来实现。 然后覆盖方法“deleteBackward” 此方法将捕获所有退格事件。

Swift中的代码:

override func deleteBackward() {
        super.deleteBackward()
        // Enter your stuff here
    }

同时确保你也在调用super方法,因为它正在执行事件的基本功能。