我正在尝试回复click
中的textfield
。点击发生时,我打开panel
。我最初的想法是使用delegate
方法来回应click
事件 - 但我发现:
此方法不起作用:
(void)textDidBeginEditing:(NSNotification *)aNotification
此方法 工作,但仅当我在文本字段中实际编辑文本时,而不是在我第一次单击它时。并且 - 如果我第二次编辑文本,此方法将停止工作:
(void)controlTextDidBeginEditing:(NSNotification *)aNotification
理想情况下,我可以使用尽可能多的细节 - 或代码示例。我知道nstextfield
继承自NSControl
,其中有mouseDown
个事件。有没有类似的方法来回复textfield
的事件?
答案 0 :(得分:10)
由于NSTextField
继承自NSControl
类,因此它也会继承-(void)mouseDown:(NSEvent*) theEvent
方法。
答案 1 :(得分:8)
今天点击它需要NSTextField
调用委托函数,并认为这个基本代码可能有用。请注意NSTextField
已经有一个委托,而在SDK v10.6中,委托已经有一个与之关联的协议。请注意,如果您不关心协议,编译器警告等,则不需要协议和属性声明或getter和setter。
MouseDownTextField.h:
#import <Appkit/Appkit.h>
@class MouseDownTextField;
@protocol MouseDownTextFieldDelegate <NSTextFieldDelegate>
-(void) mouseDownTextFieldClicked:(MouseDownTextField *)textField;
@end
@interface MouseDownTextField: NSTextField {
}
@property(assign) id<MouseDownTextFieldDelegate> delegate;
@end
MouseDownTextField.m:
#import "MouseDownTextField.h"
@implementation MouseDownTextField
-(void)mouseDown:(NSEvent *)event {
[self.delegate mouseDownTextFieldClicked:self];
}
-(void)setDelegate:(id<MouseDownTextFieldDelegate>)delegate {
[super setDelegate:delegate];
}
-(id)delegate {
return [super delegate];
}
AppDelegate.h:
@interface AppDelegate <MouseDownTextFieldDelegate>
...
@property IBOutlet MouseDownTextField *textField;
...
AppDelegate.m:
...
self.textField.delegate = self;
...
-(void)mouseDownTextFieldClicked:(MouseDownTextField *)textField {
NSLog(@"Clicked");
...
}
...
如果您使用10.5 SDK构建,请不要让协议继承自NSTextFieldDelegate
。