2012-02-20 5 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 방법이있다. 이 모든 것이 잘 작동합니다.

지금, 나는 글꼴 옵션 중 일부를 사용하지 않으려는, 그래서 NSFontPanelValidation 프로토콜의 validModesForFontPanel 방법 구현 :

- (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

관련 문제