코코아에서 nsfontpanel 사용
-
06-07-2019 - |
문제
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];
핵심 문제는이 줄입니다.
[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];
}
제휴하지 않습니다 StackOverflow