我有一个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?提前谢谢。
答案 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];