2013-02-16 70 views
9

我使用NSTableViewdoubleClickAction来显示NSPopover。这样的事情:NSPopover - 重点丢失时隐藏? (点击弹出框外)

NSInteger selectedRow = [dataTableView clickedRow]; 
NSInteger selectedColumn = [dataTableView clickedColumn]; 


// If something was not selected, then we cannot display anything. 
if(selectedRow < 0 || selectedColumn < 0) 
{ 
    NSLog(@"Invalid selected (%ld,%ld)", selectedRow, selectedColumn); 
    return; 
} // End of something was not selected 

// Setup our view controller, make sure if there was already a popover displayed, that we kill that one off first. Finally create and display our new popover. 
DataInspectorViewController * controller = 
[[DataInspectorViewController alloc] initWithNibName: @"DataInspectorViewController" 
               bundle: nil]; 

if(nil != dataPreviewPopover) 
{ 
    [dataPreviewPopover close]; 
} // End of popover was already visible 

dataPreviewPopover = [[NSPopover alloc] init]; 
[dataPreviewPopover setContentSize:NSMakeSize(400.0f, 400.0f)]; 
[dataPreviewPopover setContentViewController:controller]; 
[dataPreviewPopover setAnimates:YES]; 
[dataPreviewPopover showRelativeToRect: [dataTableView frameOfCellAtColumn: selectedColumn row: selectedRow] 
        ofView: dataTableView 
       preferredEdge: NSMinYEdge]; 

它工作得很好。我的双壳蛋糕被创建,并在双击的单元上移除。问题是,如果我点击外面的任何地方(比如单击另一个单元格),我希望popover消失。我一直在环顾四周,但对于我的生活无法弄清楚如何去做。

这是我认为是内置到popover,(我相当肯定它是在iOS UIPopoverController类),所以我只是想知道如果我错过了一些简单的东西。

回答

41

我认为你需要改变你的酥料饼的财产行为(代码或接口生成器),以

dataPreviewPopover.behavior = NSPopoverBehaviorTransient; 

NSPopoverBehaviorTransient 
The system will close the popover when the user interacts with a user interface element outside the popover. 

在文档阅读更多关于这一点: https://developer.apple.com/documentation/appkit/nspopover