0

我有一个 NSPanel,我想将其设置为keyWindow它应该发布NSWindowDidBecomeKeyNotification,但是即使在调用该makeKeyWindow方法时,也不会发布通知。下面是我的代码,但我无法弄清楚它有什么问题:

newPanel = [[NSPanel alloc]initWithContentRect:windowRect
                                         styleMask:NSUtilityWindowMask
                                           backing:NSBackingStoreBuffered 
                                             defer:FALSE];

    [[NSNotificationCenter defaultCenter]addObserver:self 
                                            selector:@selector(test:) 
                                                name:@"NSWindowDidBecomeKeyNotification" 
                                              object:newPanel];
    // Create a slider and add to the panel
    NSSlider *slider = [[NSSlider alloc]initWithFrame:NSMakeRect(0, 0, windowRect.size.width, windowRect.size.height)];
    [[newPanel contentView]addSubview:slider];
    // Set window attributes
    [newPanel setHasShadow:TRUE];
    [newPanel setFloatingPanel:TRUE];
    [newPanel setReleasedWhenClosed:TRUE];
    [newPanel setHidesOnDeactivate:TRUE];
    [newPanel setBecomesKeyOnlyIfNeeded:NO];
    [newPanel makeKeyWindow];
    [newPanel makeFirstResponder:slider];
    [newPanel orderFront:sender];

现在,当我调用[newPanel makeKeyWindow];NSWindowDidBecomeKeyNotification 时,应该发布并-(void)test:(NSNotification*)aNotification调用它。但它没有被调用。

4

1 回答 1

1

我将您的代码复制并粘贴到一个新项目中,它甚至没有显示面板,对您有用吗?我可以通过创建一个属性 thePanel(编译器不喜欢 newPanel 这个名称,不知道为什么)并将 thePanel 的所有引用更改为 self.thePanel 来使其工作。此外,我将 NSTitledWindowMask 添加到样式掩码参数 (styleMask:NSUtilityWindowMask | NSTitledWindowMask) 中,或者将 makeKeyWindow 命令移到 orderFront 命令之后,或者将这两个命令替换为 makeKeyAndOrderFront:self.window。

于 2012-07-20T16:02:49.607 回答