簡體   English   中英

更改活動和非活動NSTextField的文本顏色

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM