2013-02-16 38 views
9

Tôi đang sử dụng doubleClickAction của số NSTableView để hiển thị NSPopover. Một cái gì đó như thế này:NSPopover - Ẩn khi tiêu điểm bị mất? (nhấp vào bên ngoài cửa sổ bật lên)

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

Chỉ hoạt động tốt. Cửa sổ bật lên của tôi được tạo và xóa trên các ô mà tôi nhấp đúp vào. Vấn đề là, tôi muốn cửa sổ bật lên biến mất nếu tôi nhấp vào bất kỳ nơi nào bên ngoài nó (như một lần nhấp vào một ô khác). Tôi đã nhìn xung quanh, nhưng đối với cuộc sống của tôi không thể tìm ra cách để làm điều đó.

Đây là điều tôi cho là được xây dựng thành một cửa sổ bật lên, (Tôi khá chắc chắn nó nằm trong lớp iOS UIPopoverController) vì vậy tôi chỉ tự hỏi nếu im thiếu một cái gì đó đơn giản.

Trả lời

41

Tôi nghĩ rằng bạn cần phải thay đổi hành vi tài sản của popover của bạn (trong mã hoặc xây dựng giao diện) để

dataPreviewPopover.behavior = NSPopoverBehaviorTransient; 

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

đọc thêm về điều này trong tài liệu: https://developer.apple.com/documentation/appkit/nspopover

Các vấn đề liên quan