在控件上按下删除键时检测

时间:2016-02-21 17:16:12

标签: swift macos nscontrol

如何将NSControl对象(例如NSImageView)子类化以检测按下删除键?具体来说,我想清除NSImageView中的图像,但可能有更广泛的应用。

2 个答案:

答案 0 :(得分:3)

NSControl进行子类化并覆盖keyDown函数。使用NSEvent.charactersIgnoringModifiers检查NSDeleteCharacter的unicode值。

    override func keyDown(theEvent: NSEvent) {
        //From Apple sample code: https://developer.apple.com/library/ios/samplecode/Lister/Listings/Swift_ListerOSX_ListViewController_swift.html
        if theEvent.charactersIgnoringModifiers == String(Character(UnicodeScalar(NSDeleteCharacter))) {
            //Take action. 

        }
     }

答案 1 :(得分:2)

它应该只是实现-delete:操作方法,这是编辑菜单的删除项发送到响应者链的方法。这样,它不仅适用于Delete键,还适用于调用该菜单项的所有其他方式(鼠标,将焦点放在菜单上,按箭头键,辅助功能等进行导航)。

事实上,NSImageView已经实现了-delete:,所以你确定你必须做任何事情吗?