gpt4 book ai didi

objective-c - 显示 Yes-No NSAlert 模式并在同一方法中获取值

转载 作者:行者123 更新时间:2023-12-03 16:43:24 26 4
gpt4 key购买 nike

所以,假设我有一个这样的方法,用于在实际关闭之前检查 document 是否已被修改:

- (BOOL) canCloseDocument:(id)document
{
if ([document modified])
CONFIRM_ALERT(@"Close Document",
@"Are you sure you want to close this document?",
[[core browser] window],
@selector(confirm:code:context:),
nil);
else
return YES;
}

在这种情况下,将调用 confirm:code:context: 方法,并且 canCloseDocument 不会返回任何内容。

这是我的 CONFIRM_ALERT 定义:

#define CONFIRM_ALERT(X,Y,Z,W,V) \
NSAlert* confirmAlert = [NSAlert alertWithMessageText:X \
defaultButton:@"OK" \
alternateButton:@"Cancel" \
otherButton:nil \
informativeTextWithFormat:Y]; \
[confirmAlert beginSheetModalForWindow:Z \
modalDelegate:self \
didEndSelector:W \
contextInfo:V];
<小时/>

问题:

如何才能显示警报表,并在同一方法 (canCloseDocument:) 中检索值(按下确定?按下取消?),以便它可以返回还是

最佳答案

工作表是窗口模式的,而不是应用程序模式的。这意味着它们不会按照您希望的方式运行。该工作表将显示,但执行流程必须返回到主事件循环,以便用户可以继续在应用程序的其他窗口上进行操作。

如果您想在返回之前得到答案,则必须使用模态警报。创建警报,然后对其调用 -runModal,而不是 -beginSheetModalForWindow:modalDelegate:didEndSelector:contextInfo:

但是,这会阻止用户在消除模式警报之前对您的应用执行任何其他操作。请注意,这不仅仅是模态警报所固有的,它是您希望 -canCloseDocument: 在得到答案之前不返回的愿望所固有的。这意味着执行流不会返回到主事件循环,而主事件循环是允许与您的应用程序交互的。

关于objective-c - 显示 Yes-No NSAlert 模式并在同一方法中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10041798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com