문제

NSFONTPANEL을 사용하여 사용자가 응용 프로그램 전체 글꼴 설정을 변경할 수 있도록 노력하고 있습니다. 사용자는 버튼을 클릭하고 글꼴 패널이 나타나고 글꼴과 크기를 선택하고 선택이 지속됩니다.

다음 코드는 패널을 보여줍니다.

- (IBAction)showFontMenu:(id)sender {
    NSFontManager *fontManager = [NSFontManager sharedFontManager];
    [fontManager setDelegate:self];

    NSFontPanel *fontPanel = [fontManager fontPanel:YES];
    [fontPanel makeKeyAndOrderFront:sender];
}

문서는 FONT가 변경 될 때 ChangeFont : (ID) 발신자 메소드를 호출해야한다고 제안하는 것 같습니다. 제 경우에는 이런 일이 일어나지 않습니다.

- (void)changeFont:(id)sender {
    // blah
}

내가 잘못하고있는 일에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

당신이 정의한 객체 -changeFont: 켜기는 응답자 체인에서 첫 번째 응답자 이상이어야합니다. 이 방법을 정의한 위치를 지정하지는 않았지만 응답자 체인에 있지 않은 컨트롤러 객체에 있다고 가정합니다.

다른 팁

이것 포함 :

[fontManager setTarget:self];

NSFontManager'대의 대표는 주로 글꼴 패널에 공급하는 글꼴을 필터링하기 위해 존재합니다. -fontManager:willIncludeFont:.

Kperryua가 언급했듯이 -changeFont: 응답자 체인을 전송합니다. 글꼴 메뉴 또는 닫는보기를 시작하는 버튼은 응답자를 배치하기에 좋은 장소 일 수 있습니다. -changeFont:.

당신은 찾을 수 있습니다 글꼴 처리 가이드보다 약간 더 유용합니다 글꼴 패널 가이드.

핵심 문제는이 줄입니다.

[fontPanel makeKeyAndOrderFront:sender];

글꼴 패널을 키 창으로 만들면 -changefont : to와 같은 작업 메시지를 어디로 보내야하는지 알 수 없습니다.

여기 내 작업 구현이 있습니다. 핵심 요점은 당신이 구현 한 첫 번째 응답자로 객체를 만들어야한다는 것입니다. - (void)changeFont:(id)sender

NSFontManager *fontManager = [NSFontManager sharedFontManager];

NSFontPanel *panel = [fontManager fontPanel:YES];
[[self window] makeFirstResponder:self];

[panel orderFront:self];

간단한 변경 사항 : 구현 참조 - 글꼴 처리

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top