我有一个窗口,我正在创建基于Tableview中的一行,实例化如下:
HKLUserProfileController *userProfileController = [[HKLUserProfileController alloc] initWithNibName:@"HKLUserProfileController" bundle:nil];
_wc =[[NSWindowController alloc] initWithWindowNibName:@"HKLProfileWindowController"];
[_wc.window.contentView addSubview:userProfileController.view];
// other extraneous stuff here
[_wc showWindow:self];
if([_wc.window canBecomeKeyWindow]) {
[_wc.window makeMainWindow];
[NSApp activateIgnoringOtherApps:YES];
[self makeKeyAndOrderFront:self];
}
这样可行,但我似乎无法让窗口成为主/键/前窗。我试过了:
...从我创建 WindowController 的地方,以及 NSViewController 的viewDidLoad / loadView内部,其视图已添加到窗口。没有骰子。 (这是我的最终目标,所以如果你看到一些我不知道的东西,请指出它。)
所以我意识到我应该在WindowController本身的子类中尝试这样做...所以我想把它放在 windowDidLoad 中,但没有结果。我设置了一些断点,并尝试了其他逻辑初始化方法,令我惊讶的是,它们中的无根本就没用了。
@implementation HKLProfileWindowController
- (void)windowDidLoad {
[super windowDidLoad];
// breakpoint here
}
-(void)awakeFromNib {
// breakpoint here
}
- (id)init {
// breakpoint here
self = [super init];
if (self) {
// breakpoint here
}
return self;
}
@end
据我所知,我的xib作为Outlet / Delegate正确连接到我的文件所有者。这让我相信这是问题的根源,但对于我的生活,我无法弄清问题是什么......
...谢谢
修改
我意识到keyWindow正在发生的事情 - 因为它来自TableView中的shouldSelectRow,它正在成为mouseDown事件的关键,但是第一个窗口 - 它拥有TableView - 再次成为mouseUp事件的关键......令人抓狂!
将搜索解决方案,但在这里开放评论!
(仍然无法弄清楚为什么init方法没有开火......
答案 0 :(得分:1)
您在alloc / init行中使用NSWindowController
并希望它成为HKLProfileWindowController
实例?为什么呢?
您还需要将文件所有者自定义类设置为HKLProfileWindowController
,但是当您要求HKLProfileWindowController
时,没有理由认为这足以获得NSWindowController
实例。你得到的是一个NSWindowController
,没有使用任何子类代码。
如果您的代码来自实施HKLProfileWindowController
课程之前的代码,我将删除此答案,但鉴于您在此处粘贴的内容,这就是您的断点不会受到影响的原因。