2013-02-11 2 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

соглашение UI на Mac OS X должны сделать оповещение Диалогов выше для более длинных сообщений, не шире. Эта функция должна быть автоматической в ​​NSAlert; вам не придется ничего настраивать самостоятельно. – duskwuff

+0

Что делать, если ваша строка очень длинная? (В этом случае у вас будет предупреждение, которое растягивается на вашем дисплее?) Что делать, если ваша строка удлиняется, потому что вы локализованы, скажем, на английский, на романский язык, что сделает его дольше на 30%? (Такая же проблема, опять.) Ваш вопрос интригует, но обертка разработана в NSAlert, потому что, ну, она не знает, что она собирается отображать. – trudyscousin

+0

Это нормально, и я это понимаю, но я просто показываю некоторые имена файлов (включая шаблоны). – Lupurus

ответ

7

NSAlert может быть расширен путем добавления вспомогательного зрения достаточной ширины:

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

ты гений! почему это еще не принятый ответ? –

+0

этот ответ должен быть принят, ничего плохого в этом. –