当前位置:  开发笔记 > 编程语言 > 正文

我应该使用哪种委托方法来响应NSTextField上的点击?

如何解决《我应该使用哪种委托方法来响应NSTextField上的点击?》经验,为你挑选了2个好方法。

我正在努力回应一个click内部textfield.点击发生时,我打开一个panel.我最初的想法是使用一种delegate方法来响应click事件 - 但我发现:

此方法不起作用:

(void)textDidBeginEditing:(NSNotification *)aNotification

这种方法确实有效,但只有在我实际编辑文本字段中的文本时才会有效,而不是在我第一次单击它时.并且 - 如果我第二次编辑文本,此方法将停止工作:

(void)controlTextDidBeginEditing:(NSNotification *)aNotification

我可以尽可能多地使用细节 - 或理想的代码示例.我知道一个nstextfield继承NSControl,其中有一个mouseDown事件.是否有类似的方式来响应事件textfield,也?



1> locriani..:

由于NSTextField继承自NSControl类,它还继承了该-(void)mouseDown:(NSEvent*) theEvent方法.



2> Colin..:

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.

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有