1

私は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];
}

ユーザーがビューの外側をクリックした場合と同じように、ポップオーバーを開くのではなく、ポップオーバーを閉じるにはどうすればよいですか?前もって感謝します。

(左= 1回クリック、右=複数回クリック)

4

2 に答える 2

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];
    ...
}
于 2012-12-01T10:04:59.930 に答える
2

簡単な方法は、その動作を変更することです。動作プロパティを NSPopOverBehaviourTransient に設定するだけで、ユーザーがポップオーバーにない別の UI 要素を操作すると、その要素は破棄されます。

[popover setBehaviour:NSPopOverBehaviourTransient];
于 2012-12-19T09:21:56.970 に答える