Detect delete key using UIKeyCommand

前端 未结 3 2066
广开言路
广开言路 2021-02-07 14:15

Anyone know how to detect the \"delete\" key using UIKeyCommand on iOS 7?

相关标签:
3条回答
  • 2021-02-07 14:47

    As people were having problems with Swift, I figured a small, complete example in both Objective C and Swift might be a good answer.

    Note that Swift doesn't have a \b escape character for backspace, so you need to use a simple Unicode scalar value escape sequence of \u{8}. This maps to the same old-school ASCII control character number 8 ("control-H", or ^H in caret notation) for backspace as \b does in Objective C.

    Here's an Objective C view controller implementation that catches backspaces:

    #import "ViewController.h"
    
    @implementation ViewController
    
    // The View Controller must be able to become a first responder to register
    // key presses.
    - (BOOL)canBecomeFirstResponder {
        return YES;
    }
    
    - (NSArray *)keyCommands {
        return @[
            [UIKeyCommand keyCommandWithInput:@"\b" modifierFlags:0 action:@selector(backspacePressed)]
        ];
    }
    
    - (void)backspacePressed {
        NSLog(@"Backspace key was pressed");
    }
    
    @end
    

    And here's the equivalent view controller in Swift:

    import UIKit
    
    class ViewController: UIViewController {
    
        override var canBecomeFirstResponder: Bool {
            return true;
        }
    
        override var keyCommands: [UIKeyCommand]? {
            return [
                UIKeyCommand(input: "\u{8}", modifierFlags: [], action: #selector(backspacePressed))
            ]
        }
    
        @objc func backspacePressed() {
            NSLog("Backspace key was pressed")
        }
    
    }
    
    0 讨论(0)
  • 2021-02-07 14:50

    Simple really - need to look for the backspace character "\b"

    0 讨论(0)
  • 2021-02-07 15:13

    You can always try UIKeyInput. https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIKeyInput_Protocol/index.html#//apple_ref/occ/intfm/UIKeyInput/deleteBackward

    The function should be

    - (void)deleteBackward

    0 讨论(0)
提交回复
热议问题