gpt4 book ai didi

swift - 使用 Swift 在 AppKit 中处理键盘事件

转载 作者:IT王子 更新时间:2023-10-29 05:29:19 29 4
gpt4 key购买 nike

我有一个自定义的 NSView 子类,需要处理一些键盘事件。在 Objective-C 中,我可能会这样处理:

-(void)keyDown:(NSEvent *)event
{
unichar ch = [[event charactersIgnoringModifiers] characterAtIndex:0];

if (ch == NSUpArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
// Scroll to top
return;
}
else if (ch == NSDownArrowFunctionKey && (event.modifierFlags & NSCommandKeyMask)) {
// Scroll to bottom
return;
}

switch (ch) {
case NSRightArrowFunctionKey:
// Select the current row
return;
case ' ':
// Scroll down one page
return;
default:
break;
}

[super keyDown:event];
}

然而,在 Swift 中,characterAtIndex: 返回一个 unichar,而 NSUpArrowFunctionKey: Int"": String(或 字符)。我不清楚如何将 unichar 转换为 StringCharacter

我让这个工作正常,但感觉像是一个丑陋的解决方法。有没有更好的办法?

func keyDown(theEvent: NSEvent) {
let char = Int(theEvent.charactersIgnoringModifiers.utf16[0]) // <----- This seems ugly
let hasCommand = (theEvent.modifierFlags & .CommandKeyMask).value != 0

switch char {

case NSUpArrowFunctionKey where hasCommand == true:
// Scroll to top
break

case NSDownArrowFunctionKey where hasCommand == true:
// Scroll to bottom
break

case NSRightArrowFunctionKey where hasCommand == true:
// Select the current row
break

case Int(" ".utf16[0]): // <---- Surely there's a better way of doing this?
// Scroll down one page
break

default:
super.keyDown(theEvent)
}
}

最佳答案

让经常被忽视的 interpretKeyEvents() 为您完成一些杂乱的工作。它知道各种键,包括方向键:

override func keyDown(event: NSEvent) {
interpretKeyEvents([event]) // calls insertText(_:), moveUp(_:), etc.
}

override func insertText(insertString: AnyObject) {
let str = insertString as! String
switch str {
case " ":
println("User hit the spacebar.")
default:
println("Unrecognized input: \(str)")
}
}

override func moveUp(sender: AnyObject?) {
println("Up arrow.")
}

override func moveLeft(sender: AnyObject?) {
println("Left arrow.")
}

override func deleteBackward(sender: AnyObject?) {
println("Delete.")
}

NSResponder Class Reference响应 Action 消息部分列出了这些和其他处理键盘事件的方法。

关于swift - 使用 Swift 在 AppKit 中处理键盘事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870322/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com