gpt4 book ai didi

objective-c - 如何判断 NSPanel 何时获得焦点或成为关键?

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

我正在 XCode4 中编写 Cocoa/Objective-C 应用程序,我需要知道我的首选项面板何时打开。我需要一些回调,例如 windowDidBecomeKey ;我尝试遵循 this question 中提供的解决方案,但 windowDidBecomeKeywindowDidExpose 都不显示为委托(delegate)方法(但其他方法,如 windowDidLoadwindowWillLoad 等) .

为了准确地澄清我的意思“不显示为委托(delegate)方法”,我的意思是当我开始输入方法名称时它们不会显示在自动完成中。无论如何,我确实尝试定义它们,但它们从未被调用。

NSPanel 对象是否缺少这些方法,或者我还需要做更多的事情吗?

目前,我有一个接口(interface) PrefWindowController:

PrefWindowController.h:

#import <Cocoa/Cocoa.h>

@interface PrefWindowController : NSWindowController
//Delegate methods like windowDidBecomeKey appear to not be available here
@end

PrefWindowController.m:

@implementation PrefWindowController

- (id)initWithWindow:(NSWindow *)window
{
self = [super initWithWindow:window];
if (self) {
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert setMessageText:@".."];
[alert runModal];
}

return self;
}

- (void)windowDidLoad
{
NSAlert *alert = [[[NSAlert alloc] init] autorelease];
[alert setMessageText:@"Loaded"];
[alert runModal];
}

@end

当应用程序启动时从 .xib 加载窗口时,将触发 windowDidLoad 并显示上面定义的通知。我这样做只是为了测试方法是否确实被调用。

任何有关如何在面板成为关键或获得焦点时获得回调的建议都会非常有帮助。

更新:

我向窗口 Controller 添加了一个 windowDidBecomeKey 方法,如下所示:

PrefWindowController.h:

- (void)windowDidBecomeKey:(NSNotification *)notification;

PrefWindowController.m:

- (void)windowDidBecomeKey:(NSNotification *)notification
{
NSLog(@"Test");
}

第一次打开窗口时会记录测试消息,但在 main.m 文件的返回行上出现错误:

Thread 1: Program Received Signal: "EXC_BAD_ACCESS"

最佳答案

NSWindowDelegate协议(protocol)有以下方法

- (void)windowDidBecomeKey:(NSNotification *)notification
- (void)windowDidResignKey:(NSNotification *)notification

因此您可以将 NSWindowController 设置为 NSWindow 委托(delegate)来获取此回调。您还可以注册这些通知:

NSWindowDidResignKeyNotification
NSWindowDidBecomeKeyNotification

NSPanel 是 NSWindow 子类,因此所有这些行为都适用于您的情况。

关于objective-c - 如何判断 NSPanel 何时获得焦点或成为关键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359347/

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