使用UIKeyCommand检测删除密钥

Sco*_*tty 12 cocoa ios uikeycommand

任何人都知道UIKeyCommand在iOS 7上如何检测"删除"键?

Mat*_*son 21

由于人们遇到了Swift的问题,我在Objective C和Swift中找到了一个小而完整的例子可能是一个很好的答案.

请注意,Swift没有\b退格的转义字符,因此您需要使用简单的Unicode标量值转义序列\u{8}.对于退格,这映射到相同的旧学校ASCII控制字符编号8(" 插入符号 "中的"control-H"或^ H ),如\b目标C中所示.

这是一个捕获退格的Objective C视图控制器实现:

#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
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)


Sco*_*tty 16

很简单 - 需要查找退格字符"\ b"

  • 这不适合我.它声明"无效的转义序列".所以我把它改成了""\\ b"​​`但是这导致在Mac键盘上点击"删除"时没有调用该方法.`UIKeyCommand(输入:"\\ b",modifierFlags:nil,action:"methodToCall:")` (4认同)
  • @Joey 尝试用“\u{08}”代替“\\b” (3认同)