xcodeの最新バージョンでは、NSTextFieldのkeyDownイベントを取得しようとしています。 しかし、インターネット上の複数のチュートリアル(デリゲート、コントローラ...)にもかかわらず、私はまだそれを受け取ることができません。NSTextFieldのkeyDownイベントを取得する
私には簡単なヒントはありますか?
ありがとうございます!
xcodeの最新バージョンでは、NSTextFieldのkeyDownイベントを取得しようとしています。 しかし、インターネット上の複数のチュートリアル(デリゲート、コントローラ...)にもかかわらず、私はまだそれを受け取ることができません。NSTextFieldのkeyDownイベントを取得する
私には簡単なヒントはありますか?
ありがとうございます!
次にあなたが押された文字を許可するように、テキストフィールド
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
戻りYESにすべてのキーを押しを検出するためにこれを使用することができ、この
@interface ViewController : UIViewController <UITextFieldDelegate> {
のようなあなたの.hにUITextFieldDelegateを追加フィールドに挿入することができますが、ここに必要なコードを追加できます。
NStextFieldをサブクラス化して、NSTextFieldで動作するkeyUpを使用できます。私は私がダウンして私の鼻を入れて、それを他の方法の人々を行うには、すべての非回答の病気になったと方法を考え出し
-(void)keyUp:(NSEvent *)theEvent {
NSLog(@"Pressed key in NStextField!");
}
.M内の.h
@interface MyTextField : NSTextField <NSTextFieldDelegate>
で
この仕事をするこれはkeydownイベントを直接使用していませんが、ブロック内のkeydownを使用しています。そして、その行動はまさに私が望んでいたものです。
サブクラスになっファーストレスポンダの設定では、テキストフィールド
の.h
@interface LQRestrictedInputTextField : NSTextField
.M
ローカルイベント
static id eventMonitor = nil;
- (BOOL)becomeFirstResponder {
BOOL okToChange = [super becomeFirstResponder];
if (okToChange) {
[self setKeyboardFocusRingNeedsDisplayInRect: [self bounds]];
if (!eventMonitor) {
eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) {
NSString *characters = [event characters];
unichar character = [characters characterAtIndex:0];
NSString *characterString=[NSString stringWithFormat:@"%c",character];
NSArray *validNonAlphaNumericArray = @[@" ",@"(",@")",@"[",@"]",@":",@";",@"\'",@"\"",@".",@"<",@">",@",",@"{",@"}",@"|",@"=",@"+",@"-",@"_",@"?",@"#",
@(NSDownArrowFunctionKey),@(NSUpArrowFunctionKey),@(NSLeftArrowFunctionKey),@(NSRightArrowFunctionKey)];
if([[NSCharacterSet alphanumericCharacterSet] characterIsMember:character] || character == NSCarriageReturnCharacter || character == NSTabCharacter || character == NSDeleteCharacter || [validNonAlphaNumericArray containsObject:characterString ]) { //[NSCharacterSet alphanumericCharacterSet]
} else {
NSBeep();
event=nil;
}
return event;
} ];
}
}
NSLog(@"become first responder");
return okToChange;
}
テキストフィールドの編集一度イベントを削除終了
ARCを使用している場合は、textview文字列をstringValueに割り当てる必要があるかもしれないことに気付きました。私はstringValueをnslog'dし、値は保持されました。 nslogがなければ通知オブジェクトの文字列をstringValueに割り当てて、それが解放されないようにしなければなりませんでした。
-(void) textDidEndEditing:(NSNotification *)notification {
[NSEvent removeMonitor:eventMonitor];
eventMonitor = nil;
NSTextView *textView=[notification object];
self.stringValue=textView.string;
}
フィールドエディタの仕組みによって、少し複雑です。実際に何をしようとしていますか? –