Detect delete key using UIKeyCommand

2019-03-25 06:15发布

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

3条回答
可以哭但决不认输i
2楼-- · 2019-03-25 06:56

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

查看更多
再贱就再见
4楼-- · 2019-03-25 07:07

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")
    }

}
查看更多
登录 后发表回答