我有一个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。但是它没有被调用。

最佳答案

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

关于objective-c - NSPanel不会成为关键窗口,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11579531/

10-11 00:33