首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSWindow跟踪

NSWindow跟踪
EN

Stack Overflow用户
提问于 2012-08-20 18:27:26
回答 2查看 382关注 0票数 2

我想跟踪OS应用程序中每次出现(对用户可见)某个窗口的时间。哪里是呼叫追踪器最合适的地方?

也许是windowWillLoad

我希望找到像windowWillAppear这样的东西,但似乎我想的太多了iOS。

EN

回答 2

Stack Overflow用户

发布于 2012-08-20 18:34:21

如何获得通知,如NSWindowDidBecomeMainNotification,由main我猜是最顶部的一个屏幕上直接可见的用户。

请参阅:Apple Documentation

票数 1
EN

Stack Overflow用户

发布于 2017-07-31 15:05:41

是的,人们期望窗口会用windowWillAppearwindowDidAppear消息通知它的代理或控制器,或者发布像NSWindowDidAppearNotification这样的文档化通知。但遗憾的是,这些都不存在。我向苹果提交了一份bug报告,得到的建议是使用故事板和视图控制器。这在已经使用了大量窗口控制器和xibs的遗留应用程序中是没有帮助的。

您可以子类化NSWindow并重写orderWindow:relativeTo:来发送通知。大多数(但不是全部)使窗口显示自身的消息最终都要经过这种方法,包括orderBack:orderFront:makeKeyAndOrderFront:-[NSWindowController showWindow:]。但是orderFrontRegardless不通过orderWindow:relativeTo:,所以为了完整性,您可能还想覆盖它。

另一种通知方式是创建NSViewController的子类,它控制窗口中始终可见的一些视图。视图控制器将接收viewWillAppearviewDidAppear

如果您出于其他原因已经将NSWindowNSViewController子类化,那么这两种方法都是一个合理的解决方案。

如果您还没有派生NSWindow的子类,并且没有Cocoa子类用于在窗口中始终可见的视图,那么另一种方法是使用NSViewController绑定将窗口的visible绑定连接到您的对象之一的属性。例如,我有一个自定义的NSWindowController子类。我给了它一个windowIsVisible属性:

代码语言:javascript
复制
@interface MyWindowController ()

@property (nonatomic) BOOL windowIsVisible;

@end

我像这样实现了存取器:

代码语言:javascript
复制
- (BOOL)windowIsVisible { return self.window.visible; }

- (void)setWindowIsVisible:(BOOL)windowIsVisible {
    NSLog(@"window %@ became %s", self.window, windowIsVisible ? "visible" : "hidden");
}

awakeFromNib中,我像这样将窗口的visible绑定绑定到属性:

代码语言:javascript
复制
- (void)awakeFromNib {
    [super awakeFromNib];

    [self.window bind:NSVisibleBinding toObject:self withKeyPath:NSStringFromSelector(@selector(windowIsVisible)) options:nil];
}

当窗口变为可见时,将使用YES参数调用setWindowIsVisible:设置器。请注意,如果整个应用程序被隐藏并重新出现,则会再次调用设置器,即使在应用程序被隐藏时没有使用参数NO调用它。因此,请注意,不要认为该窗口以前是隐藏的。

此外,绑定可能会创建一个保留周期,因此您可能应该在窗口关闭时取消绑定它,除非您希望保留窗口和控制器。请注意,当窗口关闭时,它会开机自检NSWindowWillCloseNotification,所以您不需要任何特殊的魔法来检测它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12036018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档