2011-02-10 11 views
18

मैं पॉपओवर मेनू "ओपन इन ..." दिखाने के लिए UIDocumentInteractionController का उपयोग कर रहा हूं ताकि उपयोगकर्ता अन्य एप्लिकेशन में एक दस्तावेज़ खोल सके।आईआईडी पर अनुपलब्ध बाहरी एप्लिकेशन के कारण UIDocumentInteractionController दस्तावेज़ खोलने में विफल रहेगा या नहीं?

विधि presentOpenInMenuFromBarButtonItem:animated:NO देता है यदि कोई दस्तावेज़ नहीं दिया गया दस्तावेज़ खोलने में सक्षम नहीं है (मेनू नहीं दिखाया जाएगा)। लेकिन अब तक मेरे पास इंतजार करने में बहुत देर हो चुकी है। मैं उस उपयोगकर्ता को उम्मीदों को बढ़ाने के बजाय खोलना शुरू करने के बटन को अक्षम करना चाहता हूं और फिर "क्षमा करें, इसे खोलना संभव नहीं है"।

क्या यह देखने के लिए सिस्टम से पूछना संभव है कि कम से कम एक दस्तावेज़ विशेष दस्तावेज़ प्रकार के लिए पंजीकृत है या नहीं? मैंने को QLPreviewController में चेक किया है, लेकिन ऐसा लगता है कि यह उसी दस्तावेज़ प्रकार का समर्थन नहीं करता है जो UIDocumentInteractionController संभाल सकता है।

उत्तर

10

[संपादित करें] आईओएस 6.0 के लिए काम नहीं कर (देखें टिप्पणी)

ऐसा लगता है dismissMenuAnimated (एनिमेशन में सभी के साथ) कुंजी है कि:

-(BOOL)canOpenDocumentWithURL:(NSURL*)url inView:(UIView*)view { 
    BOOL canOpen = NO; 
    UIDocumentInteractionController* docController = [UIDocumentInteractionController 
                interactionControllerWithURL:url]; 
    if (docController) 
    { 
     docController.delegate = self; 
     canOpen = [docController presentOpenInMenuFromRect:CGRectZero 
            inView:self.view animated:NO];     
     [docController dismissMenuAnimated:NO]; 
    } 
    return canOpen; 
} 

यह हाँ वापस आ जाएगी पर अगर कम से कम एक एप्लिकेशन url द्वारा इंगित फ़ाइल को खोलने में सक्षम है। कम से कम यह मेरे मामले (केएमजेड फाइल) में काम कर रहा है, आईफोन आईओएस 4.3 पर ड्रॉपबॉक्स ऐप के साथ/बिना परीक्षण।
असल में, ऐसा लगता है कि यूआरएल वास्तविक फ़ाइल (यानी @ "test.kmz") पर इशारा नहीं कर रहा है, लेकिन मैं सभी फाइल प्रकारों के लिए इस पर भरोसा नहीं करता हूं।

+0

यह वह समाधान था जिसे मैंने पहले अपनाया था, लेकिन आईओएस 6 के लिए चेतावनी का एक शब्द। ऐसा लगता है कि इस तरह से नियंत्रक को प्रस्तुत करना और खारिज करना यूआईटीएबीबार को कुछ साइड इफेक्ट्स का कारण बनता है - विशेष रूप से, 'यूआईटीएबीबार बटन (निजी एपीआई) जो टैब बनाता है बार छुपा हुआ है लेकिन अप्रशिक्षित नहीं है। कुछ खोदने से ऐसा लगता है कि बटन 0 अल्फा पर सेट हैं, फिर 'वर्तमान' विधि को कॉल करने पर एनीमेशन पूर्णता ब्लॉक में छिपा हुआ है। दुर्भाग्यवश एनीमेशन समापन ब्लॉक को 'खारिज' विधि के बाद निष्पादित किया जाता है ताकि बटन छिपे रहें। – Weaverfish

+0

आप सही हैं। क्या आपने हल खोज लिया ? – FKDev

+0

इस समस्या का कोई समाधान ..? –

-4

-[UIApplication canOpenURL:] नौकरी करना चाहिए।

+2

ऐसा लगता है कि ओपनर URL केवल यूआरएल की योजनाओं को हल करता है। इस मामले में मैंने हमेशा फ़ाइल दर्ज की है: // और मैं विभिन्न दस्तावेज़ प्रकारों (पीडीएफ, जेपीईजी, ...) – palob

+0

किसी भी मामले में, ओपनURL नहीं कर सकता: यह निर्धारित करें कि आपका एप्लिकेशन दस्तावेज़ खोल सकता है, न कि अन्य आपके द्वारा इंस्टॉल किए गए एप्लिकेशन ऐसा कर सकते हैं? – Roger

+0

उह, हम जानते हैं कि हमारे द्वारा लिखे जाने वाले कार्यक्रमों को कौन सी फाइलें लिख सकती हैं, है ना? क्योंकि यह हम हैं जो ऐप लिख रहे हैं?'canOpenURL: 'निर्धारित करता है कि क्या अन्य ऐप्स हैं जो योजना खोल सकते हैं, उपरोक्त लिंक किए गए आधिकारिक दस्तावेज में टिप्पणी देखें। ओएस एक्स पर यह कार्यक्षमता 'NSWorkspace' में है और यह' NSAplplication' से अलग है। लेकिन किसी भी तरह ऐप्पल ने उन्हें आईओएस पर गठबंधन करने का फैसला किया। अजीब। – Yuji

5

मैं चीजों को करने के लिए एक कम हैकी तरीके से आया, लेकिन एक सीमा है कि आप केवल यह पता लगा सकते हैं कि उपयोगकर्ता ने ऐप में खोलने के बाद एक संगत ऐप किया है या नहीं। यह आपको ड्रॉपबॉक्स ऐप के समान उपयोगकर्ता अनुभव प्रदान करने में सक्षम करेगा।

आपको केवल UIDocumentInteractionControllerDelegate सेट अप करने की आवश्यकता है और एक बूलियन ध्वज संपत्ति बनाएं जो रखती है कि मेनू प्रस्तुत किया गया था या नहीं।

इंटरफ़ेस में:

/** 
The document interaction controller used to present the 'Open with' dialogue. 
*/ 
@property (nonatomic,strong) UIDocumentInteractionController *documentInteractionController; 

/** 
Boolen that holds whether or not there are apps installed that can open the URL. 
*/ 
@property (nonatomic) BOOL hasCompatibleApps; 

कार्यान्वयन में:

मुझे आशा है कि कुछ लोगों को मदद मिलती है।

3

यह मेरे लिए काम करता है:

self.docController = [UIDocumentInteractionController interactionControllerWithURL:url]; 
    UIView *v = [[UIView alloc] init]; 
    BOOL isAnAppAvalaible = [self.docController presentOpenInMenuFromRect:CGRectZero inView:v animated:NO]; 
0
NSURL *url = [NSURL URLWithString:@"path_to_the_file"]; 
UIDocumentInteractionController *controller = 
    [UIDocumentInteractionController interactionControllerWithURL:url]; 
BOOL openResult = [controller presentPreviewAnimated:NO]; 

आप फ़ाइलों को दिखाने के लिए presentPreviewAnimated: का उपयोग करते हैं आप openResult का उपयोग पता लगाने के लिए अगर यह सफलतापूर्वक खोला गया था कर सकते हैं।

+0

वर्तमान पूर्वावलोकन समीक्षा: हमेशा मेरे लिए नहीं लौटाता है। मैं presentOpenInMenuFromRect के साथ चिपके रहूंगा: इनव्यू: एनिमेटेड: जहां इसे दृश्य में प्रस्तुत किया गया है, ऑफ-स्क्रीन ले जाया गया है। – palob

संबंधित मुद्दे

 संबंधित मुद्दे