我正在尝试构建一个显示图像的Mac应用程序,当我按下右箭头键时,我想继续下一个图像.我已经遍布stackoverflow和互联网,但似乎无法得到它.
我尝试了什么...我尝试使用keyDown(theEvent: NSEvent)但是当我按任意键时它不会打电话.我相信这是因为它不属于某种文本领域,但不确定.
发生了什么...当我测试程序时,我按下一个键(准备好keyDown功能println("Key Pressed")),我得到OS X拒绝噪音,没有打印到控制台.
我听说有些人继承子类NSView来覆盖acceptsFirstResponder,但我是新的子类,所以任何你可以指出我的方向都会很棒.或者,如果有一种方法可以做到没有子类化NSView,这将是伟大的!
提前致谢!抱歉,这是一个noobness.
子类化比看起来要困难.
一般假设:将在NSViewController子类的视图中接收击键并在视图控制器类中处理
MyView子类的新Cocoa类NSView用.替换创建的类的内容
import Cocoa
let leftArrowKey = 123
let rightArrowKey = 124
protocol MyViewDelegate {
func didPressLeftArrowKey()
func didPressRightArrowKey()
}
class MyView: NSView {
var delegate : MyViewDelegate?
override func keyDown(event: NSEvent) {
let character = Int(event.keyCode)
switch character {
case leftArrowKey, rightArrowKey:
break
default:
super.keyDown(event)
}
}
override func keyUp(event: NSEvent) {
let character = Int(event.keyCode)
switch character {
case leftArrowKey:
delegate?.didPressLeftArrowKey()
case rightArrowKey:
delegate?.didPressRightArrowKey()
default:
super.keyUp(event)
}
}
override var acceptsFirstResponder : Bool {
return true
}
}
Run Code Online (Sandbox Code Playgroud)
MyView在ViewController类中添加协议MyViewDelegate- 例如
class ViewController: NSViewController, MyViewDelegate {
Run Code Online (Sandbox Code Playgroud)在viewDidLoad()加
let view = self.view as! MyView
view.delegate = self
self.nextResponder = view
Run Code Online (Sandbox Code Playgroud)实现以下委托方法并添加代码以切换图像
func didPressLeftArrowKey() {
println("didPressLeftArrowKey")
// process keystroke left arrow
}
func didPressRightArrowKey() {
println("didPressRightArrowKey")
// process keystroke right arrow
}
Run Code Online (Sandbox Code Playgroud)释放相应的箭头键时将调用委托方法
| 归档时间: |
|
| 查看次数: |
2400 次 |
| 最近记录: |