当NSTextField变为活动状态时,我想将文本颜色更改为“红色”。所有非活动文本字段都需要包含“黑色”文本。
使用becomeFirstResponder方法,我可以将文本颜色更改为“红色”。但是,当文本字段失去焦点时,文本颜色保持“红色”。一旦它是非活动的NSTextField,我需要将文本颜色更改回“黑色”。我尝试了resignFirstResponder方法,但它没有将文本颜色更改回“黑色”。
这是我的代码:
#import <Foundation/Foundation.h>
@interface MyTextField : NSTextField {
}
@end
和
#import "MyTextField.h"
@implementation MyTextField
- (BOOL)becomeFirstResponder {
if (![super becomeFirstResponder]) {
return NO;
} else {
[self setTextColor:[NSColor redColor]];
return YES;
}
}
- (BOOL)resignFirstResponder {
if (![super resignFirstResponder]) {
return NO;
} else {
[self setTextColor:[NSColor blackColor]];
return YES;
}
}
@end
答案 0 :(得分:2)
我认为问题在于,当文本字段成为第一响应者时,字段编辑器将采用颜色属性,但是当文本字段重新占用时,它将替换它。您很可能希望直接更改字段编辑器上的属性。
您可以通过在窗口的委托中替换您自己的字段编辑器来执行此操作,如下所示:
- (id)windowWillReturnFieldEditor:(NSWindow *)sender toObject:(id)client {
if ([client isKindOfClass:[MyTextField class]]) {
static NSTextView *fieldEditor;
if (nil == fieldEditor) {
fieldEditor = [[NSTextView alloc] init];
[fieldEditor setFieldEditor:YES];
}
[fieldEditor setDelegate:client];
[fieldEditor setTextColor:[NSColor redColor]];
return fieldEditor;
}
else return nil;
}
答案 1 :(得分:1)
为什么不在-textDidEndEditing
子类中添加方法NSTextField
?
- (void)textDidEndEditing:(NSNotification *)notification
{
[self setTextColor:[NSColor blackColor]];
[super textDidEndEditing:notification];
}