Pergunta

Eu tenho um NSAlert com uma visualização de acessório e três botões, os botões não estão alinhados à direita (para o sistema LTR), mas parecem expandir para a largura da visualização do acessório, conforme mostrado abaixo NSAlert e visualização de acessórios

Também removendo a visualização do acessório, os três botões não estão alinhados corretamente à direita

Como posso resolver esse problema?Não quero substituir o NSAlert escrevendo o código sozinho, por que devo reinventar a roda?

O código que uso é copiado por setAccessoryView e relatado abaixo

NSTextView *accessory = [[NSTextView alloc] initWithFrame:NSMakeRect(0,0,600,15)];
NSFont *font = [NSFont systemFontOfSize:[NSFont systemFontSize]];
NSDictionary *textAttributes = [NSDictionary dictionaryWithObject:font forKey:NSFontAttributeName];
[accessory insertText:[[NSAttributedString alloc] initWithString:@"Text in accessory view"
                                                      attributes:textAttributes]];
[accessory setEditable:NO];
[accessory setDrawsBackground:NO];

NSAlert *alert = [[NSAlert alloc] init];

[alert setMessageText:@"Message text"];
[alert setInformativeText:@"Informative text"];
[alert setAccessoryView:accessory];

[alert addButtonWithTitle:@"Btn 3"];
[alert addButtonWithTitle:@"Btn 2"];
[alert addButtonWithTitle:@"Btn 1"];

[alert runModal];
[alert release];
Foi útil?

Solução

Esse é o layout padrão atual de um alerta. Um alerta com três botões é tratado de maneira diferente porque seu caso de uso comum é:

  • O primeiro botão (por exemplo, OK) representa uma confirmação
  • O segundo botão (por exemplo, Cancelar) representa um cancelamento
  • O terceiro botão (por exemplo, matar o pinguim) representa uma ação alternativa, potencialmente destrutiva.

O terceiro botão está posicionado à esquerda para deixar claro que representa uma ação distinta de ir em frente (primeiro botão) e parar (segundo botão).

Isso pode ser visto em alguns aplicativos da Apple. Nas páginas:

insira a descrição da imagem aqui

No TextEdit:

insira a descrição da imagem aqui

Além disso, A documentação do NSAlert afirma que:

O layout de alerta padrão está sujeito a alterações em versões futuras do software do sistema. Portanto, se você depende de um layout de alerta personalizado, certifique-se de que seus layouts funcionem conforme o esperado nas versões futuras do Mac OS.

Portanto, eles podem decidir no futuro alinhar todos os três botões à direita ou apenas o primeiro botão à direita e os dois botões restantes à esquerda. Isso explica por que o NSAlert não fornece API pública para especificar a posição ou alinhamento de seus botões.

Se você realmente precisa de um layout diferente, parece que você mesmo terá que projetá-lo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top