2014-11-20 3 views
2

내 코코아 앱에서 글꼴 패널을 사용하려고하는데 changeFont : 메서드를 호출 할 수 없습니다.NSFontPanel changeFont가 호출되지 않았습니다.

나는 다른 응용 프로그램에서 제대로 작동했고 코드를 복사하여 붙여 넣었지만, 이상한 이유로 changeFont 메서드가 호출되지 않았습니다. 다음은 코드입니다 :

- (IBAction)onOpenFontPanelBtnClicked:(id)sender 
{ 
    NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 

    NSString* theFontName = [defaults objectForKey:DefaultFontNamePrefKey]; 
    NSFont* theFont = [NSFont fontWithName:theFontName size:12.0f]; 

    NSFontManager* fontMgr = [NSFontManager sharedFontManager]; 
    [fontMgr setTarget:self]; 
    [fontMgr setAction:@selector(changeMyCustomFont:)]; 

    NSFontPanel* panel = [fontMgr fontPanel:YES]; 
    [panel setPanelFont:theFont isMultiple:NO]; 
    [panel orderFront:self]; 
    panel.enabled = YES; 

    NSLog(@"Font manager target: %@ (class: %@), action: %@", fontMgr.target, [fontMgr.target className], NSStringFromSelector(fontMgr.action)); 
} 

- (void) changeMyCustomFont:(id)sender 
{ 
    NSLog(@"New font: %@", [[NSFontManager sharedFontManager] selectedFont]); 
} 

이 코드하는 것은 모달 창 (기본 설정 창) 내부 뷰 컨트롤러에서 호출되고 있으며, 글꼴 패널은 잘 열립니다. 그러나 대상과 액션을 수동으로 설정했지만 변경 사항은 없습니다.

응답기 체인과 관련된 문제입니까? 어떻게 해결할 수 있습니까? 보기 컨트롤러를 응답기 체인에 수동으로 추가해야합니까? 내가 어떻게 그럴 수 있니? 사전에

감사합니다!

+0

나는 잠시 동안이 작업을 수행하지 않았지만 공유 글꼴 관리자에서 대상/작업을 설정하면 전체 프로세스에 대해 하나의 처리기 만있을 수 있습니다. 그건 나에게 맞는 것 같지 않아. – trojanfoe

+0

의견을 보내 주셔서 감사합니다. 문제를 해결하는 동안 해당 코드를 추가했습니다. 따라서 이것은 제거 될 때도 작동하지 않습니다. – guitarflow

답변

0

이 기능을 통해 우연히 발견되는 다른 사람들을 돕기 위해 내 자신의 질문에 대답합니다. 제가 생각하기에이 문제는 응답자 체인과 관련이 있습니다.

내 계층 구조는 다음과 같이이었다 : (NSWindowController에 의해 관리) NSWindow 표시 ->있는 contentView - 나는 리스폰 더 체인 창 컨트롤러에 끝난 것을 알아 냈다 (NSViewController에 의해 관리)> childview

. 따라서 글꼴 패널에서 changeFont : 메시지를 구현 한보기 컨트롤러에 보낼 수 없습니다. 나는이 문제를 해결할 수있는 창 컨트롤러에 코드 줄을 추가하여

:

내가 아직 그래도 이해하지 못하는 것은 내가 수동으로 대상/액션을 구성 할 때 작동하지 않는 이유입니다
self.nextResponder = self.theViewCtrl; 

. 어쨌든, 그것은 나를 위해 지금 일합니다.

+0

나는 동일한 문제가있어 해결책을 시도하고 싶다. 그러나 자아가 무엇인지 분명하지 않습니다. 또한, 창이나보기 컨트롤러가 연관되어 있지 않은 경우 어떻게해야합니까? –

관련 문제