クリックするとすべてのテキストが選択される NSTextField を実装したいと思います。(ユーザーが現在のすべてのテキストを簡単に削除できるようにするため) Enter/Tab を押すかマウスを四角形の外に移動して編集を終了したら、フォーカスをフィールドの外に移動し、アルファ値を次のように変更します。 0.5。
私のコード:
H ファイル:
#import <Foundation/Foundation.h>
@interface MoodMsgTextField : NSTextField<NSTextFieldDelegate>
@end
M ファイル:
-(BOOL) becomeFirstResponder
{
NSLog(@"become first responder");
BOOL result = [super becomeFirstResponder];
if(result)
{
[self setAlphaValue:1.0];
[self performSelector:@selector(selectText:) withObject:self afterDelay:0];
}
return result;
}
-(BOOL) refusesFirstResponder
{
return NO;
}
-(BOOL) resignFirstResponder
{
NSLog(@"resigning first responder");
BOOL result = [super resignFirstResponder];
NSText* fieldEditor = [self.window fieldEditor:YES forObject:self];
[fieldEditor setSelectedRange:NSMakeRange(0,0)];
[fieldEditor setNeedsDisplay:YES];
[self setAlphaValue:0.5];
return result;
}
-(void)awakeFromNib
{
self.delegate = self;
[self setAlphaValue:0.5];
[self setBordered:YES];
[self setWantsLayer:YES];
self.layer.borderWidth = 0.5;
self.layer.borderColor = [[NSColor grayColor] CGColor];
}
- (void)controlTextDidChange:(NSNotification *)aNotification
{
NSLog(@"the text is %@",self.stringValue);
}
- (void)controlTextDidEndEditing:(NSNotification *)aNotification
{
NSLog(@"end editiing : the text is %@",self.stringValue);
[self.window makeFirstResponder:nil];
}
- (void)mouseEntered:(NSEvent *)theEvent
{
[self setWantsLayer:YES];
self.layer.borderWidth = 0.5;
self.layer.borderColor = [[NSColor grayColor] CGColor];
}
- (void)mouseExited:(NSEvent *)theEvent
{
[self setWantsLayer:YES];
self.layer.borderWidth = 0;
}
だから、私はいくつかの問題があります:
1.
NSTextField の内側を押すと (フォーカスが外側にある場合)、即座に最初のレスポンダーになり、辞任し、編集終了メッセージが表示されます。何故ですか ?クリックして取得するログは次のとおりです。
2011-08-02 18:03:19.044 ooVoo[42415:707] become first responder
2011-08-02 18:03:19.045 ooVoo[42415:707] resigning first responder
2011-08-02 18:03:19.104 ooVoo[42415:707] end editing : the text is
2.
Enter キーを押すと、内部のすべてのテキストが選択されるだけで、マウスのフォーカスは移動しません。タブを押すとフォーカスが移動するように見えますが、どちらの場合も rejectFirstResponder が呼び出されません。なんで ?
3. マウス イベント関数が呼び出されていません。そのために何か特別なことをする必要がありますか? NSResponder のものなので、NSTextField から継承して無料で取得しようと思いました。ここでも NSTrackingInfo が必要ですか?
4.
最後になりましたが、何らかの理由で、2 文字ごとに 1 文字が太字に見えます。理由がわかりません。
助けていただければ幸いです。ありがとう