我对在Objective-C中提升事件感到有些困惑,
我来自C#(.NET)环境,我想学习Objective-c和Cocoa编程。
所以这是我的问题:
我有一个NSTextField的小应用程序,我想用它来听一个事件。
我想做什么:当我在此控件中双击时,它会引发一个事件并弹出ex:一个显示“Double clicked”的NSAlert。
那么我怎么能这样做,我是一个视觉人,所以我需要一些代码来说明它是如何工作的;就像我应该放在.h类和.m类中一样。
提前致谢,
亚历。
答案 0 :(得分:2)
您需要阅读Cocoa Fundamentals and the target/action mechanism。 NSControl(与其NSButton子类一样)有一个目标,它将自身作为发送方发送给它。并非所有控件都支持-doubleAction,但有些控件支持。
NSButton / NSButtonCell不支持双重操作,因此您需要执行一些子类化并覆盖鼠标方法。可以查询NSEvent(传入鼠标方法)的点击次数,以区分双击和单打。
只是为了记录,它通常是点击并保持,在OS X上产生一个上下文菜单,这个功能是通过按钮面右侧某处的向下箭头宣布的。很少有人会真正知道菜单是否有双击,很难用按钮面上的符号来表示。考虑按钮上下文菜单的点击并按住触发器。
答案 1 :(得分:0)
我不确定您为什么要在文本字段中执行此操作,但以下是如何执行此操作:
您需要使用一个子类来覆盖点击行为以进行双击。头文件看起来像这样:
#import <Cocoa/Cocoa.h>
@interface ClassName : NSTextField {
//Any new instance variables here
}
//Any new methods here
@end
,实现文件如下所示:
#import "ClassName.h"
@implementation ClassName
- (void)mouseUp:(NSEvent *)event {
//You can also do this with mouseDown:, depending on when you prefer to handle the event
if([event clickCount] == 2) {
//Handle double click here
} else [super mouseUp:event]; //or pass to parent implementation
}