문제

This is how I display an open panel as a floating window.

Can someone help me out with running the panel as a sheet ? The window object is mWindow. Much of the standard code I was using is depreciated.

NSOpenPanel *openPanel = [NSOpenPanel openPanel];
NSArray* fileTypes = [[NSArray alloc] initWithObjects:@"mp3", @"mp2", @"m4a", nil];

[openPanel setAllowsMultipleSelection: NO];
[openPanel setCanChooseDirectories:NO];
[openPanel setCanCreateDirectories:NO];
[openPanel setCanChooseFiles:YES];
[openPanel setAllowedFileTypes:fileTypes];

NSString * filePath = @"~/Desktop";
filePath = [filePath stringByExpandingTildeInPath];
NSURL *fileURL = [NSURL fileURLWithPath:filePath]; 
[openPanel setDirectoryURL:fileURL];

NSInteger clicked = [openPanel runModal];
if (clicked == NSFileHandlingPanelOKButton) {
    for (NSURL *url in [openPanel URLs]) {
        NSString *urlString = [url path];
        [input setStringValue:urlString];
        NSString *myString = [input stringValue];
        NSString *oldPath = [myString lastPathComponent];
        [inputDisplay setStringValue:oldPath];
    }
}
도움이 되었습니까?

해결책

Pretty simple, it's right there in the docs though you may have missed it because the relevant method is actually part of NSSavePanel, from which NSOpenPanel inherits.

Presuming you're targeting Snow Leopard or better and thus have access to blocks, it's just a matter replacing your runModal call with this:

[openPanel beginSheetModalForWindow:mWindow completionHandler:^(NSInteger result) {

    if (result == NSFileHandlingPanelOKButton) {

        // Do something.
    }
}];
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top