Учитывая все сложные вещи, которые я, кажется, освещаю каждый день, кажется, что «какого черта я делаю неправильно, что кажется простым?» сценарий!
Я бы хотел создать подкласс NSTextField
для изменения цвета фона и цвета текста. Для простоты (и для того, чтобы помочь любому, кто еще ничего не делил на подклассы), вот пример моего (упрощенного) подкласса MyNSTextFieldSubclass
...
Шаг 1:
Создать файл подкласса:
Первый файл заголовка
@interface MyTextFieldSubclass : NSTextField {
}
@end
И файл метода
@implementation MyTextFieldSubclass
-(NSColor *)backgroundColor {
return [NSColor redColor];
}
-(NSColor *)textColor {
return [NSColor yellowColor];
}
@end
Шаг 2:
Перетащите NSTextField
в окно в Интерфейсном Разработчике, выберите вкладку Identity
в Инспекторе и выберите класс MyTextFieldSubclass
Шаг 3:
Сохраните файл IB, соберите и запустите приложение
Задача
Когда я запускаю сборку, текстовое поле не отражает подклассы цвета. Однако я знаю, что подкласс вызывается, потому что, если я добавлю следующий метод, он будет вызван при изменении текста.
-(void)textDidChange:(NSNotification *)notification {
NSLog(@"My text changed");
}
Так почему же не происходит изменение цвета в текстовых полях?
Я знаю, что могу установить цвет в IB, но для любого, кто имел дело с лотом элементов пользовательского интерфейса, для которых требуется одинаковое оформление, создание подклассов делает жизнь более удобной.
По иронии судьбы, мне никогда не приходилось делать подкласс NSTextField
раньше, и этот поставил меня в тупик.
Как обычно, любая помощь очень ценится. Я уверен, что это окажется "Doh!" момент - просто не могу видеть лес за деревьями прямо сейчас (к тому же я устал от того, что смотрю слишком много футбольного чемпионата мира рано утром, который никогда не помогает).
=== РЕШЕНИЕ ===
Согласно предложению Яануса, решение состоит в том, чтобы поместить его в метод viewWillDraw
. Таким образом, мой (упрощенный) метод теперь будет выглядеть так:
@implementation MyTextFieldSubclass
-(void)viewWillDraw {
[super setBackgroundColor:[NSColor redColor]];
[super setTextColor:[NSColor yellowColor]];
}
@end
Спасибо, ребята, за вашу помощь.