5

click内のに応答しようとしていますtextfield。クリックが発生すると、panel. 私の最初の考えは、delegateメソッドを使用してイベントに応答することでしたが、次のclickことがわかりました。

この方法は機能しません:

(void)textDidBeginEditing:(NSNotification *)aNotification

この方法機能しますが、最初にクリックしたときではなく、テキスト フィールド内のテキストを実際に編集するときにのみ機能します。そして、テキストをもう一度編集すると、このメソッドは機能しなくなります。

(void)controlTextDidBeginEditing:(NSNotification *)aNotification

可能な限り詳細を使用するか、理想的にはコード例を使用できます。がイベントを持つ をnstextfield継承していることを知っています。また、イベントに応答する同様の方法はありますか?NSControlmouseDowntextfield

4

2 に答える 2

11

NSTextFieldクラスを継承しているため、メソッドNSControlも継承しています。-(void)mouseDown:(NSEvent*) theEvent

于 2009-03-26T05:50:30.367 に答える
9

NSTextField今日、デリゲート関数をクリックして呼び出す必要があり、この基本的なコードが役立つかもしれないと考えました。NSTextField既にデリゲートがあり、SDK v10.6 では、デリゲートに関連付けられたプロトコルが既にあることに注意してください。プロトコルやコンパイラの警告などを気にしない場合は、プロトコルとプロパティの宣言、またはゲッターとセッターは必要ないことに注意してください。

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

于 2010-12-17T17:50:54.940 に答える