Изменить цвет текста активного и неактивного NSTextField - PullRequest
2 голосов
/ 06 февраля 2012

Я хотел бы изменить цвет текста на «красный», когда NSTextField станет активным.Все неактивные текстовые поля должны иметь «черный» текст.

Используя метод становленияFirstResponder, я могу изменить цвет текста на «красный».Однако, когда текстовое поле теряет фокус, цвет текста остается «красным».Мне нужно, чтобы цвет текста изменился обратно на «черный», если он неактивен 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

Ответы [ 2 ]

2 голосов
/ 06 февраля 2012

Я полагаю, что проблема в том, что редактор поля принимает атрибут цвета, когда текстовое поле становится первым респондентом, но заменяет его, когда текстовое поле уходит в отставку.Скорее всего, вы захотите изменить атрибуты в редакторе полей напрямую.

Это можно сделать, заменив собственный редактор полей в делегате окна следующим образом:

- (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 голос
/ 07 декабря 2012

Почему вы просто не добавляете метод -textDidEndEditing в свой NSTextField подкласс?

- (void)textDidEndEditing:(NSNotification *)notification
{
    [self setTextColor:[NSColor blackColor]];
    [super textDidEndEditing:notification];
}
...