【问题标题】:Stop NSPopover Opening Multiple Times停止 NSPopover 多次打开
【发布时间】:2012-09-23 11:58:15
【问题描述】:

我有一个 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];
}

如果用户在视图之外单击,我将如何关闭弹出窗口而不是打开另一个弹出窗口?提前致谢。

【问题讨论】:

    标签: nsviewcontroller nspopover


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      一个更简单的方法是改变它的行为。 只需将行为属性设置为 NSPopOverBehaviourTransient,当用户与不在弹出框中的另一个 UI 元素交互时,它将被关闭。

      [popover setBehaviour:NSPopOverBehaviourTransient];
      

      【讨论】:

      • 这绝不是一个解决方案,因为 OP 的问题是他每次调用操作时都会创建 new 弹出框。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多