2012-02-06 3 views
2

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

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

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

Вы можете сделать это, подставляя свой собственный редактор поля в делегат окна, как так:

- (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; 
} 
+0

Так что я попытался поместить код (ID) windowWillReturnFieldEditor в мой AppDelegate.m, но он, похоже, не работает. Я что-то упускаю? – wigging

+0

Вы должны сделать AppDelegate делегатом окна, подключив их в редакторе xib. –

+0

Вы имеете в виду перетаскивание из NSTextField в AppDelegate и выбор «делегата»? Если это так, я уже пробовал это. Или вы хотите перетащить из значка «окно» в док-станции на значок «AppDelegate» и выбрать «делегат»? – wigging

1

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

- (void)textDidEndEditing:(NSNotification *)notification 
{ 
    [self setTextColor:[NSColor blackColor]]; 
    [super textDidEndEditing:notification]; 
} 
Смежные вопросы