2013-02-11 249 views
3

我有幾個帶有不同文本的NSAlert對話框。我想將警告窗口寬度調整爲文本,以便文本不會換行。所以我用這個代碼來計算字符串的寬度:NSAlert調整窗口大小

NSSize size = [myString sizeWithAttributes:@{NSFontAttributeName: [NSFont systemFontOfSize:[NSFont systemFontSize]]}]; 

然後我儘量調整警報的窗口:

NSAlert *alert = [NSAlert alertWithMessageText:... 
... 
NSPanel *panel = alert.window; 
NSRect frame = panel.frame; 
float x = ((NSTextField*)[[((NSPanel*)(alert.window)).contentView subviews] objectAtIndex:5]).frame.origin.x; //the x-position of the NSTextField 
frame.size.width = size.width + x; 
[alert.window setFrame:frame display:YES]; 

此代碼的工作,但只是第一次,我用此代碼調用該方法。如果我再次使用另一個字符串並再次調用該方法,則該窗口將不會調整大小(儘管計算出的寬度不同)。

任何想法,我可以如何調整NSAlert窗口的大小?

+4

Mac OS X上的UI約定是,使警報對話框用於較長的消息,而不是較寬的高。這個功能在NSAlert中應該是自動的;你不應該自己調整任何東西。 – duskwuff 2013-02-11 21:11:50

+0

如果你的字符串真的很長,該怎麼辦? (在這種情況下,你是否會收到一條警告,顯示在你的顯示器上?)如果你的字符串因爲你從英語本地化到一種羅曼語言而延長,會使它延長多達30%? (同樣的問題,再次。)你的問題很有趣,但是這個包是設計到NSAlert中的,因爲它不知道它將要顯示什麼。 – trudyscousin 2013-02-11 21:39:54

+0

沒關係,我明白,但我只是顯示一些文件名(包括pathes)。 – Lupurus 2013-02-11 21:42:11

回答

7

的NSAlert可以通過加入足夠的寬度的一個附屬視圖加寬:

NSAlert *alert = [[[NSAlert alloc] init] autorelease]; 
alert.accessoryView = [[[NSView alloc] initWithFrame:NSMakeRect(0, 0, 500, 0)] autorelease]; 
+0

你是一個天才!爲什麼這不是被接受的答案呢? – 2015-12-18 12:43:37

+0

這個答案應該被接受,這沒什麼不對。 – 2018-01-30 09:41:29