【问题标题】:How do you implement the Method makeKeyAndOrderFront:?你如何实现方法 makeKeyAndOrderFront:?
【发布时间】:2012-12-03 10:29:19
【问题描述】:

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

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

【问题讨论】:

    标签: objective-c cocoa


    【解决方案1】:

    你不想实现-makeKeyAndOrderFront:,你想在你的窗口上调用它,以便把它带到前面并使它成为关键窗口。你的showWindow: 方法有什么作用?

    【讨论】:

      【解决方案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];
      }
      

      【讨论】:

      • 你的意思是在[self.window makeKeyAndOrderFront:self]之后; } 或在 } 之前?
      【解决方案3】:

      消息makeKeyAndOrderFront 仅在启动主事件循环[NSApp run] 后发送。您可以尝试通过实现viewWillDraw 方法从主视图发送消息:

      - (void)viewWillDraw
      {
          [window makeKeyAndOrderFront: nil];
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        • 1970-01-01
        • 2016-01-05
        • 2014-10-17
        • 1970-01-01
        • 2012-06-24
        相关资源
        最近更新 更多