停止NSPopover多次打开

时间:2012-09-23 11:58:15

标签: nsviewcontroller nspopover

我有一个NSButton,当点击它时,会打开一个NSPopover,我唯一的问题是当再次点击该按钮时,NSPopover再次打开另一个,弹出窗口打开使用:

- (IBAction)openSettingsPopover:(id)sender {
    NSViewController *controller = [[NSViewController alloc] initWithNibName:@"Settings" bundle:nil];
    NSPopover *popover = [[NSPopover alloc] init];
    [popover setContentSize:NSMakeSize(288.0f, 170.0f)];
    [popover setContentViewController:controller];
    [popover setAnimates:YES];
    [popover showRelativeToRect:[sender bounds] ofView:sender preferredEdge:NSMaxXEdge];
}

如果用户在视图外点击,我将如何解除popover而不是打开另一个popover?提前谢谢。

(left = clicked once, right = clicked multiple times)

2 个答案:

答案 0 :(得分:3)

保留对NSPopover实例的引用,在打开新实例之前检查它是否为nil

- (IBAction)openSettingsPopover:(id)sender {
    if (self.settingsPopover) {
        // Close it when clicked again, or simply return
        [self.settingsPopover close];
    }

    self.settingsPopover = [[NSPopover alloc] init];
    ...
}

答案 1 :(得分:2)

更简单的方法是改变它的行为。 只需将behavior属性设置为NSPopOverBehaviourTransient,当用户与另一个不在popover中的UI元素进行交互时,它将被解除。

[popover setBehaviour:NSPopOverBehaviourTransient];