2012-10-17 108 views
3

我想添加一个复选框到NSOpenPanel,然后在收到选定文件时查询它的状态。我怎样才能做到这一点?添加复选框到NSOpenPanel

此外,根据当前文件选择启用或禁用复选框将是可取的。

回答

7

基于约书亚Nozzi和马克Alldritt的答案,完整的解决方案:

NSOpenPanel* openDlg = [NSOpenPanel openPanel]; 
NSButton *button = [[NSButton alloc] init]; 
[button setButtonType:NSSwitchButton]; 
button.title = NSLocalizedString(@"I am a checkbox", @""); 
[button sizeToFit]; 
[openDlg setAccessoryView:button]; 
openDlg.delegate = self; 
[openDlg beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) 
{ 
    openDlg.delegate = nil; // TODO: Check if this is necessary 
    if (result != NSFileHandlingPanelOKButton) return; 
    BOOL checkboxOn = (((NSButton*)openDlg.accessoryView).state == NSOnState); 
    // Do something 
}]; 

的NSOpenSavePanelDelegate:

- (void)panelSelectionDidChange:(id)sender { 
    NSOpenPanel *panel = sender; 
    NSButton *button = (NSButton*)panel.accessoryView; 
    // Update button based on panel selection 
} 
3

NSOpenPanel是NSSavePanel的子类,它有-setAccessoryView:

+0

+1指着我在正确的方向。我将在稍后发布完整解决方案的答案。 – hpique

3

要根据所选文件验证您的复选框,您需要执行NSOpenSavePanelDelegate委托协议中的panelSelectionDidChange:。然后,您可以查询打开的面板当前选定的文件并根据需要更新您的复选框状态。

+0

+1帮助。 – hpique