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 Vista de alertas y accesorios NSA

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];
¿Fue útil?

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:

ingrese la descripción de la imagen aquí

En TextEdit:

ingrese la descripción de la imagen aquí

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top