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