ध्यान दें कि NSOpenPanel
NSSavePanel
से विरासत में है, जो बदले में एक प्रतिनिधि और संबंधित प्रतिनिधि प्रोटोकॉल NSOpenSavePanelDelegate
को परिभाषित करता है। आप ओपन पैनल के व्यवहार को बढ़ाने के लिए प्रतिनिधि का उपयोग कर सकते हैं ताकि आपके प्रश्न में सूचीबद्ध प्रतिबंध शामिल किया जा सके।
@interface AppDelegate : NSObject <NSApplicationDelegate, NSOpenSavePanelDelegate>
@end
आपके आवेदन प्रतिनिधि के कार्यान्वयन में, खुले पैनल बताया कि आवेदन प्रतिनिधि के रूप में कार्य करता है:
उदाहरण के लिए, आवेदन प्रतिनिधि मानते हुए खुले पैनल प्रतिबंध लागू करता है, यह NSOpenSavePanelDelegate
प्रोटोकॉल के अनुरूप खुले पैनल प्रतिनिधि:
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel setDirectory:NSHomeDirectory()];
[openPanel setCanChooseDirectories:NO];
[openPanel setDelegate:self];
[openPanel runModal];
और लागू निम्नलिखित प्रतिनिधि तरीके:
- (BOOL)panel:(id)sender shouldEnableURL:(NSURL *)url {
NSString *path = [url path];
NSString *homeDir = NSHomeDirectory();
return [path hasPrefix:homeDir] && ! [path isEqualToString:homeDir];
}
- (void)panel:(id)sender didChangeToDirectoryURL:(NSURL *)url {
NSString *path = [url path];
NSString *homeDir = NSHomeDirectory();
// If the user has changed to a non home directory, send him back home!
if (! [path hasPrefix:homeDir]) [sender setDirectory:homeDir];
}
- (BOOL)panel:(id)sender validateURL:(NSURL *)url error:(NSError **)outError {
NSString *path = [url path];
NSString *homeDir = NSHomeDirectory();
if (![path hasPrefix:homeDir]) {
if (outError)
*outError = ; // create an appropriate NSError instance
return NO;
}
return YES;
}
स्रोत
2011-04-15 22:21:51
अगर आप स्विफ्ट में अतिरिक्त समाधान प्रदान कर सकते हैं तो बहुत अच्छा होगा! – ixany