【发布时间】:2014-03-30 20:52:59
【问题描述】:
有人知道如何在 iOS 7 上使用 UIKeyCommand 检测“删除”键吗?
【问题讨论】:
标签: ios cocoa uikeycommand
有人知道如何在 iOS 7 上使用 UIKeyCommand 检测“删除”键吗?
【问题讨论】:
标签: ios cocoa uikeycommand
当人们在使用 Swift 时遇到问题时,我认为在 Objective C 和 Swift 中的一个小而完整的示例可能是一个很好的答案。
请注意,Swift 没有用于退格的\b 转义字符,因此您需要使用简单的 Unicode 标量值转义序列 \u{8}。这映射到相同的老式ASCII control character 数字 8(“control-H”,或 caret notation 中的 ^H)用于退格,就像 \b 在 Objective 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
这是 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")
}
}
【讨论】:
canBecomeFirstResponder 和 keyCommands 现在是被覆盖的属性,而不是方法,modifierFlags 现在是 OptionSet,因此如果没有修饰符,您可以传递一个空集而不是使用 allZeros kludge,我'正在使用新的#selector 语法。经测试,可使用外接键盘正常工作。
真的很简单——需要寻找退格符“\b”
【讨论】:
"\\b",但这会导致在 Mac 键盘上点击“删除”时不会调用该方法。 UIKeyCommand(input: "\\b", modifierFlags: nil, action: "methodToCall:")
\u{08} 而不是\\b
您可以随时尝试 UIKeyInput。 https://developer.apple.com/library/prerelease/ios/documentation/UIKit/Reference/UIKeyInput_Protocol/index.html#//apple_ref/occ/intfm/UIKeyInput/deleteBackward
函数应该是
- (void)deleteBackward
【讨论】:
UIKeyInput 会在成为第一响应者时提供一个键盘。