2011-04-15 19 views
5

का उपयोग कर कुछ फ़ोल्डरों तक पहुंच प्रतिबंधित करें मैं उपयोगकर्ता को दस्तावेज़ों को सहेजने के लिए फ़ोल्डर चुनने की अनुमति देने के लिए NSOpenPanel का उपयोग कर रहा हूं। मैं प्रतिबंधित करना चाहता हूं कि कौन सा फ़ोल्डर (पदानुक्रम के संदर्भ में) वे सहेज सकते हैं। अनिवार्य रूप से, मैं उनके ऊपर किसी भी फ़ोल्डर को चुनने से रोकना चाहते हैं:NSOpenPanel

/उपयोगकर्ताओं/उपयोगकर्ता नाम/

तो फ़ोल्डर

/उपयोगकर्ताओं/उपयोगकर्ता नाम/बिल्लियों/

स्वीकार्य होगा लेकिन

/उपयोगकर्ताओं/उपयोगकर्ता नाम/

/अनुप्रयोग/बिल्लियों/

अनुमति नहीं दी जाएगी। मैं सोच रहा था कि इस प्रतिबंध को कैसे कार्यान्वित किया जाए।

धन्यवाद।

उत्तर

13

ध्यान दें कि NSOpenPanelNSSavePanel से विरासत में है, जो बदले में एक प्रतिनिधि और संबंधित प्रतिनिधि प्रोटोकॉल 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; 
} 
+0

अगर आप स्विफ्ट में अतिरिक्त समाधान प्रदान कर सकते हैं तो बहुत अच्छा होगा! – ixany