2012-10-17 105 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