1

アクセサリ ビューと 3 つのボタンを備えた NSAlert があります。ボタンは右揃えではありませんが (LTR システムの場合)、以下に示すようにアクセサリ ビューの幅に拡大するようです。 NSAlert とアクセサリ ビュー

また、アクセサリ ビューを削除すると、3 つのボタンが右側に正しく配置されません

この問題を解決するにはどうすればよいですか? 自分でコードを書いて 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];
4

1 に答える 1

6

これが、アラートの現在の既定のレイアウトです。3 つのボタンがあるアラートは、一般的な使用例が次のとおりであるため、異なる方法で処理されます。

  • 最初のボタン (例: OK) は確認を表します
  • 2 番目のボタン (キャンセルなど) は、キャンセルを表します。
  • 3 番目のボタン (例: Kill the Penguin) は、破壊的な可能性のある別のアクションを表します。

3 番目のボタンは、進む (最初のボタン) と停止 (2 番目のボタン) とは異なるアクションを表すことを明確にするために左側に配置されています。

これは、一部の Apple アプリケーションで見られます。ページ内:

ここに画像の説明を入力

テキストエディットで:

ここに画像の説明を入力

また、NSAlert のドキュメントには次のように記載されています。

標準アラート レイアウトは、将来のシステム ソフトウェア バージョンで変更される可能性があります。したがって、カスタム アラート レイアウトに依存している場合は、レイアウトが Mac OS の将来のリリースで期待どおりに機能することを確認する必要があります。

したがって、将来的には、3 つのボタンすべてを右に配置するか、最初のボタンのみを右に配置し、残りの 2 つのボタンを左に配置するかを決定する可能性があります。これが、NSAlert がボタンの位置や配置を指定するパブリック API を提供しない理由を説明しています。

本当に別のレイアウトが必要な場合は、自分で設計する必要があるようです。

于 2011-10-20T09:01:10.713 に答える