Detect delete key using UIKeyCommand

前端 未结 3 2065
广开言路
广开言路 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")
        }
    
    }
    

提交回复
热议问题