Кнопки ответа не выровнены справа для NSAlert - PullRequest
1 голос
/ 20 октября 2011

У меня есть NSAlert с дополнительным видом и тремя кнопками, кнопки не выровнены вправо (для системы LTR), но, кажется, расширяются до ширины дополнительного вида, как показано ниже NSAlert and accessory view

Также при удалении дополнительного аксессуара три кнопки неправильно выровнены справа

Как можно решить эту проблему? Я не хочу заменять NSAlert написанием кода самостоятельно, почему я должен заново изобретать колесо?

Код, который я использую, скопирован setAccessoryView документацией и представлен ниже

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];

1 Ответ

6 голосов
/ 20 октября 2011

Это текущая схема оповещения по умолчанию. Оповещение с тремя кнопками обрабатывается по-разному, поскольку его общий вариант использования:

  • Первая кнопка (например, ОК) представляет собой подтверждение
  • Вторая кнопка (например, Отмена) представляет собой отмену
  • Третья кнопка (например, «Убить пингвина») представляет альтернативное действие, потенциально разрушительное.

Третья кнопка расположена слева, чтобы прояснить, что она представляет действие, отличное от движения вперед (первая кнопка) и остановки (вторая кнопка).

Это можно увидеть в некоторых приложениях Apple. На страницах:

enter image description here

В TextEdit:

enter image description here

Кроме того, Документация NSAlert гласит:

Стандартная схема оповещения может быть изменена в будущих версиях системного программного обеспечения. Поэтому, если вы полагаетесь на пользовательский макет оповещения, вы должны убедиться, что ваши макеты работают должным образом в будущих версиях Mac OS.

Таким образом, в будущем они могут решить выровнять все три кнопки справа или только первую кнопку справа и две оставшиеся кнопки слева. Это объясняет, почему NSAlert не предоставляет общедоступный API для определения положения или выравнивания своих кнопок.

Если вам действительно нужен другой макет, похоже, вам придется создавать его самостоятельно.

...