NSAlert调整窗口大小

3

我有几个不同文本的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窗口的大小?


5
在Mac OS X上,UI约定是针对长消息增加警告对话框的高度,而非宽度。这种功能应该在NSAlert中自动完成;您不需要自行调整任何内容。 - user149341
如果你的字符串非常长怎么办?(在这种情况下,你会有一个跨越整个显示器的警报吗?)如果你从英语转换为罗曼语言,字符串长度增加了30%怎么办?(同样的问题。)你的问题很有趣,但是NSAlert中的换行符是设计好的,因为它不知道将要显示什么。 - Extra Savoir-Faire
没问题,我理解。但是我只是要显示一些文件名(包括路径)。 - Lupurus
附注:我还会插入一个if条件来检查窗口是否比屏幕宽。上面的代码不完整,我只是想测试一下... - Lupurus
显示路径是使您的警报不舒适地变宽和/或变高的真正好方法;此外,无论您如何塑造它们,路径都很丑陋。您不应该向用户显示任何路径。更好的方法是使用NSPathControl,您可以将其放入NSView中,然后将其用作警报的附件视图。 - Peter Hosey
1个回答

14

通过添加足够宽度的辅助视图,可以使NSAlert变宽:

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

你真是个天才!为什么这个答案还没有被采纳呢? - Radu Simionescu
这个答案应该被接受,没有任何问题。 - Anoop Vaidya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接