2012-02-20 2 views
2

У меня есть приложение, в котором я использую NSFontPanel. открыть панель шрифта так:validModesForFontPanel никогда не назывался

NSFontManager *fontManager = [NSFontManager sharedFontManager]; 
[fontManager orderFrontFontPanel:self]; 
[fontManager setDelegate:self]; 
[fontManager setTarget:self]; 
[fontManager setAction:@selector(changeFont:)]; 

Я тогда есть -(void)changeFont:(id)sender метод, который реагирует на шрифт изменения в панели. Все это хорошо работает.

Теперь я хочу, чтобы отключить некоторые параметры шрифта, так что я реализовать validModesForFontPanel метод протокола NSFontPanelValidation:

- (NSUInteger)validModesForFontPanel:(NSFontPanel *)fontPanel { 
    NSLog(@"validModesForFontPanel"); 
    return NSFontPanelFaceModeMask | NSFontPanelCollectionModeMask | NSFontPanelSizeModeMask; 
} 

Однако этот метод никогда не вызывается,. В документации говорится: «Это сообщение отправляется вверх по цепочке ответчик к первому ответчику, реализующего метод В идеале этот объект должен быть первым ответчиком установлено, что также реализует changeFont :.

Я реализовать changeFont в этом ответе, поэтому, если нет другого ответчика, о котором я не знаю, я не знаю, что происходит с этим сообщением.

Есть ли у кого-нибудь предложения?

ответ

2

Вы не указали какой-либо ответчик на панель, только для менеджера.
это должно сделать это:

NSFontPanel* fontPanel = [fontManager fontPanel:YES]; 
[fontPanel setDelegate:self];  
[fontPanel makeKeyAndOrderFront:sender];  
+0

Привет JPed, спасибо за Ваш ответ. Я понял, что все прошло через «NSFontManager», но, я думаю, я ошибся. В любом случае, код выше не работает, поскольку делегат NSFontPanel должен быть экземпляром 'NSWindowDelegate', а' self' является подклассом 'NSViewController'. Это дает мне предупреждение: 'предупреждение: отправка 'TextViewController * const __strong' в параметр несовместимого типа 'id '' – pajevic

+0

Привет. Мне было немного быстро, когда я сказал, что это не сработало. На самом деле это происходит, несмотря на то, что я получаю предупреждение. Это то, с чем вы столкнулись? – pajevic

+0

Я, наконец, понял это. Предупреждение появилось, потому что мой класс не выполнял протокол NSWindowDelegate. Я просто хочу, чтобы все это было немного лучше документировано. В любом случае, спасибо за ваш ответ, он сделал трюк: D – pajevic

Смежные вопросы