7

是否可以创建完全自定义的警报?我现在正在使用自定义工作表,但我希望具有工作表阻塞的功能(如-[NSAlert runModal])。

我只是想改变背景,真的,当然还有文字颜色。

4

3 回答 3

6

关于推荐解决方案的警告:

此代码会导致浪费且无意义的开销:

for (;;) {
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
        break;
}

此代码直接从 Apple 文档页面复制而来 - 但它旨在向开发人员展示在模态运行时可以在何处插入有意义的代码以进行后台执行。也就是说,你应该在 break 和右括号之间有一些代码。但是示例中没有显示实际代码 - 像这样运行它只会导致您的应用程序反复轮询会话直到结束。这就像公路旅行中坐在汽车后座上的两岁孩子问:“我们到了吗?我们到了吗?我们到了吗?……”

如果您只想要简单的模态执行,您的应用程序会显示一个模态窗口并暂停主/背景窗口的处理,直到模态结束,请使用:

[NSApp runModalForWindow: self.window];

...然后在窗口关闭时退出模式会话,方法是将其放入窗口控制器子类:

- (void)windowWillClose:(NSNotification *)notification {
    [NSApp stopModal];
}
于 2012-08-18T18:50:04.470 回答
3

您将需要一个带有自定义视图绘图的自定义窗口,但NSAlert不允许您更改其窗口。因此,您将需要编写自己的窗口控制器子类NSAlert(尽管NSAlert是 的子类NSObject)。

于 2011-11-26T09:17:47.133 回答
2

我环顾四周,发现了这段代码:

NSModalSession session = [NSApp beginModalSessionForWindow:sheetWindow];
for (;;) {
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
        break;
}
[NSApp endModalSession:session];

我打电话

[NSApp stopModal]

结束会话。现在我的代码更干净了:)

于 2011-11-26T17:16:46.613 回答