2013-02-16 69 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