我有一个类项目,包括编程类似swype。我必须在java中这样做,你可以看看它(使用代码)here。今年夏天,我想将它移植到ObjC / Cocoa中,然后进行改进。我打算使用NSButtons作为键盘键,比如Interface Builder提出的“Gradient Button”。
所以,我看了如何处理鼠标事件(我需要鼠标按下,输入,退出和释放)。对于某些对象,看起来你必须使用委托,但对于NSButton,看起来像-mouseDown和related这样的方法在对象本身。
我的问题是,如何覆盖界面构建器对象中的方法?我尝试创建NSButton的子类,并将我的按钮的类设置为此子类,但没有结果。也许尝试覆盖这些方法根本不是正确的方法,我对每一个建议持开放态度,即使它与事件处理无关。如果它是相关的,我正在使用XCode 4运行OS X 10.6。
谢谢你的时间!
答案 0 :(得分:2)
很多将取决于您为什么需要所有各种活动。 NSButton是一个控件,因此与标准NSView的工作方式不同。
如果您最常需要弄清楚何时按下该按钮,您可以通过在IB中指定一个动作来完成此操作。这是通过在窗体的控制器类中创建一个void方法来完成的:
- (IBAction) myMouseAction:(id)sender
然后让它根据接收到的点击执行您需要的操作。然后在IB中,您可以通过按住Control键并单击按钮并拖动到控制器类(可能是所有者)并在出现提示时选择新方法,将此操作连接到按钮。
如果您需要细粒度控制,您应该考虑创建自己的NSView子类并自己处理鼠标操作,因为尝试覆盖控件是一件非常复杂的事情。 OS X控件的架构设计具有极高的性能,但它们现在有点不合时宜,而且通常不值得创建自己的工作。
另一件事是mouseEntered:,mouseMoved:和mouseExited:事件用于通过鼠标按钮处理鼠标移动。
您将要注意:mouseDown:,mouseUp:和mouseDragged:以便在按住鼠标按钮时处理事件。