[英]Change text color of the active and non-active NSTextField
我想在NSTextField啟用時將文本顏色更改為“紅色”。 所有非活動文本字段都必須具有“黑色”文本。
使用beginFirstResponder方法,我能夠將文本顏色更改為“紅色”。 但是,當文本字段失去焦點時,文本顏色仍為“紅色”。 一旦它是非活動的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
為什么不在NSTextField
子類中添加方法-textDidEndEditing
?
- (void)textDidEndEditing:(NSNotification *)notification
{
[self setTextColor:[NSColor blackColor]];
[super textDidEndEditing:notification];
}
我認為問題在於,當文本字段成為第一響應者時,字段編輯器采用了color屬性,但是當文本字段退出時,它將替換為color屬性。 您很可能希望直接在字段編輯器上更改屬性。
您可以通過在窗口的委托中替換自己的字段編輯器來做到這一點,如下所示:
- (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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.