你如何实现方法makeKeyAndOrderFront:?

时间:2009-05-07 15:57:24

标签: objective-c cocoa

我正在打开一个新窗口,并希望实现方法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];
}

我试图这样做的原因是朋友建议解决开窗问题。

3 个答案:

答案 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];
}