Los botones de respuesta no están alineados a la derecha para NSAlert
Pregunta
Tengo una alerta NSA con una vista de accesorios y tres botones, los botones no están alineados a la derecha (para el sistema LTR) pero parece expandirse al ancho de la vista de accesorios como se muestra a continuación
Al eliminar la vista de accesorios, los tres botones no están alineados correctamente a la derecha
¿Cómo puedo solucionar este problema?No quiero reemplazar la NSAlert escribiendo el código yo mismo, ¿por qué debo reinventar la rueda?
El código que utilizo es copiado por setAccessoryView y se informa a continuación
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];
Solución
Ese es el diseño predeterminado actual de una alerta. Una alerta con tres botones se trata de manera diferente porque su caso de uso común es:
- El primer botón (por ejemplo, Aceptar) representa una confirmación
- El segundo botón (por ejemplo, Cancelar) representa una cancelación
- El tercer botón (por ejemplo, Kill the Penguin) representa una acción alternativa, potencialmente destructiva.
El tercer botón está ubicado a la izquierda para dejar en claro que representa una acción distinta de seguir adelante (primer botón) y detener (segundo botón).
Esto se puede ver en algunas aplicaciones de Apple. En páginas:
En TextEdit:
Además, La documentación de NSAlert establece que:
El diseño de alerta estándar está sujeto a cambios en futuras versiones del software del sistema. Por lo tanto, si confía en el diseño de alertas personalizado, debe asegurarse de que sus diseños funcionen como se espera en futuras versiones de Mac OS.
Por lo tanto, es posible que en el futuro decidan alinear los tres botones a la derecha, o solo el primer botón a la derecha y los dos botones restantes a la izquierda. Eso explica por qué NSAlert no proporciona una API pública para especificar la posición o alineación de sus botones.
Si realmente necesita un diseño diferente, parece que tendrá que diseñarlo usted mismo.