我有一个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];
}如果用户在视图之外单击,我该如何处理关闭弹出窗口而不是打开另一个弹出窗口呢?提前谢谢。

发布于 2012-12-01 18:05:00
保留对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];
...
}发布于 2012-12-19 17:21:57
一种更简单的方法是改变它的行为。只需将behavior属性设置为NSPopOverBehaviourTransient,当用户与另一个不在弹出窗口中的UI元素交互时,它将被清除。
[popover setBehaviour:NSPopOverBehaviourTransient];https://stackoverflow.com/questions/12552172
复制相似问题