2011-10-20 72 views
1

我有一個NSAlert的附件視圖和三個按鈕,按鈕沒有對齊到右側(LTR系統),但似乎擴展到附件視圖的寬度,如下所示 NSAlert and accessory view響應按鈕沒有在右邊對齊NSAlert

還準備卸下附件查看三個按鈕未正確右

對準怎樣才能解決這個問題呢?我不想替代自己編寫代碼的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

這是一個警告的當前默認佈局的代碼。有三個按鈕警報被區別對待,因爲它的常見的情況是:

  • 的第一個按鈕(如OK)表示確認
  • 第二個按鈕(如取消)表示取消
  • 第三個按鈕(比如殺死企鵝)代表着另一種行動,可能是一種破壞性行爲。

第三按鈕位於左側,以明確其表示不同的動作從前進(第一個按鈕)和停止(第二按鈕)。

這可以在一些蘋果應用程序中看到。在頁:

enter image description here

在文字編輯:

enter image description here

此外,NSAlert’s documentation指出:

標準警報佈局有可能在未來的系統軟件版本中的更改。因此,如果您依賴自定義警報佈局,則應確保佈局在未來的Mac OS發行版中按預期工作。

因此,他們可能會在未來決定調整所有三個按鈕的權利,或只有第一個按鈕右邊,剩下的兩個按鈕的左邊。這就解釋了爲什麼NSAlert不提供公共API來指定其按鈕的位置或對齊方式。

如果你真的需要不同的佈局,看起來你必須自己設計它。

+0

謝謝!優秀的解釋。只有一個問題,如果我添加四個按鈕(或更多)的對齊是正確的。因此,當三個*和僅*三個*按鈕存在時,空間分離被應用。 – dafi

+1

@dafi是的,這是三個按鈕的具體警報。 – 2011-10-20 09:54:26