Pergunta

Eu estou tentando usar um NSFontPanel para permitir que o usuário para alterar uma configuração de fonte de toda a aplicação. É suposto trabalho algo como isto:. O usuário clica em um botão, um painel da fonte aparece, eles escolhem uma fonte e um tamanho, e sua seleção é mantido

Os seguintes mostra o código do painel:

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

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

A documentação parece sugerir que o changeFont: (id) método remetente deve ser chamado quando a fonte muda; isso não está acontecendo no meu caso.

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

Algumas ideias sobre o que eu poderia estar fazendo errado?

Foi útil?

Solução

O objeto que você definiu -changeFont: na obrigação do socorrista ou acima dele na cadeia de responder. Você não especificou onde você definiu o método, mas eu suponho que é em um objeto controlador que não está na cadeia de responder.

Outras dicas

incluem o seguinte:

[fontManager setTarget:self];

delegado do NSFontManager existe principalmente para filtrar as fontes que fornece ao painel de fonte via -fontManager:willIncludeFont:.

Como kperryua menciona, -changeFont: é enviado para a cadeia de resposta. O botão que ativa o menu de fontes ou seu ponto de vista delimitador pode ser um bom lugar para colocar uma resposta para -changeFont:.

Você pode encontrar o Fonte de tratamento guia marginalmente mais útil do que o Painel Font guia.

O problema central é esta linha:

[fontPanel makeKeyAndOrderFront:sender];

Ao fazer o painel de fonte da janela de chave, ele tem nenhuma idéia para onde enviar mensagens de ação como -changeFont:. A

Aqui está minha implementação de trabalho. ponto-chave é que você deve fazer o seu objeto como o socorrista onde você implementou - (void)changeFont:(id)sender

NSFontManager *fontManager = [NSFontManager sharedFontManager];

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

[panel orderFront:self];

Simples changeFont: implementação de Referência - Fonte de tratamento

-(void) changeFont:(id)sender
{
    //Here sender would be NSFontManager
    NSFont *oldFont = [self font];
    NSFont *newFont = [sender convertFont:oldFont];
    [self setFont:newFont];
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top