web-dev-qa-db-ja.com

UITextFieldのUIKeyboard「バックスペース」ボタンのタッチを検出する方法は?

UIKeyboardで押されたバックスペースボタンを検出するにはどうすればよいですか?

enter image description here

ありがとう


[〜#〜] edit [〜#〜]:キーが押された値を返すキーボードデリゲートはありますか?

19
elp

uITextFieldが空の場合、shouldChangeTextInRangeデリゲートメソッドは呼び出されません。UITextFieldをサブクラス化して、このメソッドをオーバーライドできます。

-(void)deleteBackward;
{
    [super deleteBackward];
    NSLog(@"BackSpace Detected");
}

uITextFieldはUITextInputプロトコルに準拠しているため、このメソッドが実装されており、このメソッドをオーバーライドして、バックスペースが押されたことを検出できます。次に、独自のプロトコル/デリゲートメソッドを記述して、バックスペースが検出された場合にカスタムテキストフィールドデリゲートに警告することができます。

59
LombaX

まず、UIViewControllerを参照するUITextFieldは、UITextFieldDelegateprotocolに準拠する必要があります。次に、クラスをdelegateとしてUITextFieldに設定します(例:[myTextField setDelegate:self])。次に、クラスに次を追加します。 ""の文字列がreplacementStringとして送信されると、それがバックスペースであることがわかります。

(BOOL)textField:(UITextField *)textField 
      shouldChangeCharactersInRange:(NSRange)range 
      replacementString:(NSString *)string
{                
    if ([string isEqualToString:@""]) {
        NSLog(@"Backspace");            
    }
    return YES;
}
29
user2457847

一時的にtextFieldDidBeginEditingにゼロスペース文字を挿入しています

textField.text = @"\u200B";

バックスペースでは、その文字が削除されますが、グラフィカルには同じです。

それはハックです、それは機能します、しかしそれはプレースホルダーテキストを隠します...良くありません...

4
elp