创建完全自定义的NSAlert

时间:2011-11-26 08:42:32

标签: objective-c cocoa customization nsalert

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

我当然只想改变背景,真实和文字颜色。

3 个答案:

答案 0 :(得分:6)

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

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

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

此代码直接从Apple文档页面复制 - 但它的目的是向模型运行时向开发人员显示可以插入有意义的代码以供后台执行。也就是说,你应该在break和closing括号之间有一些代码。但是示例中没有显示实际代码 - 并且像这样运行它只会导致应用程序重复轮询会话直到它结束。这就像在公路旅行中坐在汽车后座上的两岁小孩,问道:“我们还在吗?我们还在吗?我们还在吗?......”

如果你只是想要简单的模态执行,你的应用程序会提供一个模态窗口并暂停处理主/后台窗口直到模态结束,请使用:

[NSApp runModalForWindow: self.window];

...然后在窗口关闭时通过将其放入窗口控制器子类中退出模态会话:

- (void)windowWillClose:(NSNotification *)notification {
    [NSApp stopModal];
}

答案 1 :(得分:3)

您需要一个包含自定义视图的自定义窗口,但NSAlert不允许您更改其窗口。因此,您需要编写自己的窗口控制器子类,如NSAlert(尽管NSAlertNSObject的子类)。

答案 2 :(得分:2)

我环顾四周,找到了这段代码:

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

我打电话

[NSApp stopModal]

结束会话。 现在我的代码更清洁:)