2013-02-16 13 views
9

Używam doubleClickAction z do wyświetlania NSPopover. Coś takiego:NSPopowiadanie - Ukryj, gdy utracisz ostrość? (kliknięcie poza popover)

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]; 

Który działa dobrze. Moje popovers są tworzone i usuwane w komórkach, które dwukrotnie klikam. Problem polega na tym, że chcę, aby popover zniknął, gdy kliknę poza nim (jak pojedyncze kliknięcie na innej komórce). Rozglądałem się dookoła, ale przez całe życie nie mogę wymyślić, jak to zrobić.

Jest to coś, co przypuszczam jest wbudowany w popover, (jestem dość pewny, że był w klasie iOS UIPopoverController), więc zastanawiam się, czy im brakuje czegoś prostego.

Odpowiedz

41

Myślę, że trzeba zmienić zachowanie własności swojego popover (w kodzie lub interfejsu konstruktora) do

dataPreviewPopover.behavior = NSPopoverBehaviorTransient; 

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

przeczytać więcej na ten temat w docs: https://developer.apple.com/documentation/appkit/nspopover

Powiązane problemy