我正在打开一个新窗口,并希望实现方法makeKeyAndOrderFront:对于窗口,我想知道我需要输入什么代码才能执行此操作。
以下是我打开窗口的一些代码:
文件1(第一个控制器)
#import "PreferenceController.h"
@implementation PreferenceController
- (id)init
{
if (![super initWithWindowNibName:@"Preferences"])
return nil;
return self;
}
- (void)windowDidLoad
{
NSLog(@"Nib file is loaded");
}
文件2(操作打开窗口)
#import "Prefernces_Delegate.h"
#import "PreferenceController.h"
@implementation Prefernces_Delegate
- (IBAction)showPreferencePanel:(id)sender
{
// Is preferenceController nil?
if (!preferenceController) {
preferenceController = [[PreferenceController alloc] init];
}
NSLog(@"showing %@", preferenceController);
[preferenceController showWindow:self];
}
我试图这样做的原因是朋友建议解决开窗问题。
答案 0 :(得分:4)
你不想实现-makeKeyAndOrderFront:
,你想在你的窗口上调用它,以便将它带到前面并使其成为关键窗口。您的showWindow:
方法做了什么?
答案 1 :(得分:2)
[preferenceController showWindow:self];
之后的某个地方:
[self.window makeKeyAndOrderFront:self];
或者您是指向控制器添加方法?
// you should use a different method name, cause it's not the
// controller that is made key and ordered front.
- (void)makeKeyAndOrderFront:(id)IBAction {
[self.window makeKeyAndOrderFront:self];
}
答案 2 :(得分:0)
仅在启动主事件循环makeKeyAndOrderFront
后才发送消息[NSApp run]
。您可以尝试通过实施方法viewWillDraw
:
- (void)viewWillDraw
{
[window makeKeyAndOrderFront: nil];
}