我正在学习Objective-C,我需要处理鼠标按下事件。
我的标题如下:
@interface TestAppDelegate : NSWindow <NSWindowDelegate> {
NSWindow *window;
IBOutlet NSTextField* text_box;
}
而实施文件是:
-(void)mouseDown:(NSEvent *)event {
[text_box setFloatValue:1.0];
NSLog(@"It worked!");
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification{
[text_box setFloatValue:-1.0];
}
并且界面只有一个文本字段连接到我的text_box
。在xib文件中,我将类名设置为TestAppDelegate
。
现在,鼠标按下事件似乎有效,因为我可以看到“它工作了!”登录。但是,文本框未更新,并保留-1
。
为了了解发生了什么,我添加了一个链接到
的按钮-(IBAction)scrollerChanged:(id)sender {
[text_box setFloatValue:2.0];
}
这正确地将我的text_form
更新为2
。因此,我的解释是鼠标按下事件正在调用TestAppDelegate的不同实例。我对吗?我在这里做了一些根本错误的事情吗?
谢谢!
答案 0 :(得分:0)
看起来你确实有多个TestAppDelegate
个实例。 (让NSWindow
对象成为自己的委托和应用委托代表,这有点不寻常。)
猜测一下,你的xib中可能有NSWindow
,你将类设置为TestAppDelegate
,而xib中的另一个通用NSObject
对象也设置为你的TestAppDelegate
上课。
您可能只将text_box
链接到您的一个实例(可能是应用委托NSObject
一个),而您的NSWindow
实例是实际接收mouseDown:
的实例事件。