gpt4 book ai didi

objective-c - Snow Leopard 上的窗口关闭按钮劫持

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

我正在开发一个基于 NSDocument 的应用程序,每个窗口(选项卡)有多个文档。这意味着我需要自己处理窗口的关闭,以便我可以在窗口关闭之前查看属于该窗口的文档。为了做到这一点,我使用 standardWindowButton:NSWindowCloseButton 访问 NSWindow 的关闭按钮,并将该按钮的目标/操作设置为我的方法,而不是标准(和私有(private))_close: 方法。

这在 Lion 上效果很好,但在 Snow Leopard 上却会引起问题。每当显示模式对话框时,关闭按钮就会按预期禁用。但是,当模式对话框被关闭时,在 Snow Leopard 上,关闭按钮永远不会重新启用。我尝试使用 [closeButton setEnabled:YES] 等以编程方式重新启用它,但它似乎没有任何效果。我已经确认,只有当我更改关闭按钮的目标/操作时才会发生这种情况。

关于如何避免 Snow Leopard 上的这种行为,或者劫持关闭按钮的替代方法有什么想法吗?控制工具栏按钮的启用状态的是什么?也许我可以覆盖那里的东西?

最佳答案

我本以为你可以使用windowShouldClose:委托(delegate)方法

将 Windows 委托(delegate)设置为 AppDelegate。在 AppDelegate 中,使用 windowShouldClose: 委托(delegate)方法来调用 close 方法,并通过返回 NO 来停止窗口关闭。在您的方法中进行所有检查,然后执行Close:窗口。看我的例子

 NSWindow * thisWindow; //--pointer to window that will be closed
BOOL windowClose;//-- bool for confirming close of window.

- (BOOL)windowShouldClose:(id)sender{
thisWindow =sender;//-- set thisWindow to the sender window,the one that is to be closed )
//if (sender ==theWindow) {//--you can use this to do further checking

if (windowClose) {//-- Close window if YES
return YES;
}
//}


[self performSelector:@selector(myCloseWindow) ];//go to your method
windowClose =FALSE;//-- reset
return NO;//do not close window here
}

- (void) myCloseWindow {
NSLog(@"closing window");//-- do your stuff
windowClose =TRUE;//--give the ok to close the window
[thisWindow performClose:thisWindow];//-- perform the close, which will be redirected back to the delegate, which will now allow the window to close
}

关于objective-c - Snow Leopard 上的窗口关闭按钮劫持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579651/

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