2011-06-04 9 views
6

UIDocumentInteractionController के लिए ऐप्पल का प्रलेखन वर्तमान ओपनइनमेनूफ्रॉमबारबटन इटैम: एनिमेटेड: विधि बताती है कि "यदि दस्तावेज़ खोलने का समर्थन करने वाले कोई पंजीकृत ऐप्स नहीं हैं, तो दस्तावेज़ इंटरैक्शन नियंत्रक मेनू प्रदर्शित नहीं करता है।" मेरे ऐप में मैं एक बटन प्रदर्शित करना चाहता हूं अगर केवल डिवाइस पर एक ऐप है जो इसे खोल देगा। (मैं केवल एक फ़ाइल खोलने के लिए बटन को पॉप अप करना चाहता हूं; मुझे क्विकलुक, कॉपी या प्रिंट नहीं चाहिए)। जैसे-जैसे चीजें खड़ी होती हैं, अगर बटन वहां होता है, लेकिन कोई ऐप पंजीकृत नहीं होता है जो प्रासंगिक फ़ाइल खोल सकता है, तो उपयोगकर्ता को उस बटन का असंतोषजनक अनुभव मिलता है जो टैप किए जाने पर कुछ भी नहीं करता है।यदि कोई विशिष्ट दस्तावेज़ प्रकार खोलने का समर्थन करने वाले कोई पंजीकृत ऐप्स नहीं हैं या नहीं हैं तो प्रोग्राम (प्रोग्रामेटिक रूप से) कैसे बताना है?

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

उत्तर

11

ठीक है, अधिक शोध से पता चलता है कि एक स्टैक ओवरफ्लो उपयोगकर्ता frenchkiss-dev में solution है - दस्तावेज़ों को मुझसे और कुछ पार्श्व सोच से अधिक ध्यान से पढ़ने से लिया गया है। फ्रेंचकिस-देव के उत्तर के आधार पर नीचे मेरा कोड, व्यूडिडएपियर विधि में बैठता है और खोलने पर और फिर खुली फ़ाइल मेनू (एनीमेशन के बिना) को बंद करने पर मेरे बटन को अक्षम करता है, यह बताता है कि फ़ाइल खोलने में कोई भी ऐप्स नहीं है। इस स्निपेट का संदर्भ यह है कि एक UIDocumentInteractionController पहले से ही डीडलोड में स्थापित किया गया है और इसे [self docInteractionController] के माध्यम से एक्सेस किया गया है।

BOOL isAnAppToOpenURL = [[self docInteractionController] presentOpenInMenuFromRect:CGRectZero inView:[self view] animated: NO]; 
[[self docInteractionController] dismissMenuAnimated:NO]; 

if (!isAnAppToOpenURL) 
{ 
    // iOS think NO app is present on the device that 
    // can open the URL set on the UIDocumentInteractionController 
    [[self openFileButton] setEnabled:NO]; 
} 
1
//Connect up theOpenInBtn in IB 


@interface DocumentViewerViewController() 
{ 

    IBOutlet UIWebView *webView; 
    NSURL *fileURL; 
    NSData *fileOnline; 
    UIDocumentInteractionController *dic; 
    IBOutlet UIBarButtonItem *theOpenInBtn; 

} 


(void)viewDidLoad 
{ 
    [super viewDidLoad]; 


    BOOL isAnAppToOpenURL = [dic presentOpenInMenuFromRect:CGRectZero inView:[self view] animated: NO]; 
    [dic dismissMenuAnimated:NO]; 

    if (!isAnAppToOpenURL) 
    { 
     // iOS think NO app is present on the device that 
     // can open the URL set on the UIDocumentInteractionController 
     [theOpenInBtn setEnabled:NO]; 
    } 


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

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