2012-11-07 32 views
5

के लिए देखे जाने वाले मुख्य-मूल्य में मेरे पास एक ऑब्जेक्ट है जिसे सूचित किया जाना चाहिए जब QLPreviewController दिखाए गए दस्तावेज़ को बदलता है। QLPreviewController में प्रॉपर्टी CurrentPreviewItemIndex है जो दस्तावेज़ बदलते समय अद्यतन किया जाता है। मैंने वर्तमान ऑब्जेक्टइटेम इंडेक्स के लिए ऑब्जेक्टर के रूप में अपनी ऑब्जेक्ट को जोड़ा है और जब मेरे कोड में संपत्ति बदल दी गई है, तो यह अधिसूचना प्राप्त करता है, अब तक इतना अच्छा है। समस्या यह है कि उपयोगकर्ता स्क्रीन में दिखाए गए दस्तावेज़ को स्वाइप कर सकता है और मुझे पता चला है कि इस मामले में अधिसूचना उत्पन्न नहीं हुई है।QLPreviewController.currentPreviewItemIndex

इस मामले में अधिसूचना प्राप्त करने के लिए कोई समाधान भी? मुझे लगता है कि अधिसूचना जेनरेट की जाती है जब प्रॉपर्टी वर्तमान के प्रेटर को संदर्भित किया जाता है PreviewItemIndex और संभवतः जब उपयोगकर्ता स्वाइप करता है तो संपत्ति को आंतरिक रूप से QLPreviewController में बदल दिया जाता है।

एक और समाधान QLPreviewController में क्षैतिज स्वाइप को अक्षम करने के लिए हो सकता है लेकिन लंबवत स्वाइप को संरक्षित करना (दिखाए गए दस्तावेज़ को बदलने के लिए तीर बटन हैं)। आप उसे कैसे करते हैं?

सहायता के लिए अग्रिम धन्यवाद।

Giannandrea

+0

क्या आपको इस समस्या के लिए कोई समाधान पसंद है? मुझे भी इसी तरह के मुद्दे का सामना करना पड़ रहा है। अगर आपको समाधान मिल गया तो क्या आप यहां मार्गदर्शन कर सकते हैं? – Vijay

उत्तर

1

QLPreviewController पर एक वर्ग बनाने के लिए और उचित विधि धूर्तता और या तो KVO के लिए willChange/didChange जोड़ने;)

गंभीरता से हालांकि: मैं KVO की कोशिश की और यह या तो मेरे लिए काम नहीं किया। । 1) आईडी कह आप इस

जरूरत है लेकिन उसके लिए सेब पर बग के एक समाधान के रूप

  • (आईडी) previewPan एल: (QLPreviewPanel *) पैनल previewItemAtIndex: (NSInteger) सूचकांक {

यह ठीक कहा जाता है और हर हम स्वाइप तो मैं इस अपने खुद के सही KVO आग 'हैक' होगा। जैसे

 static NSInteger oldIndex = -1; //reset when the panel is hidden or shown 
    int newIndex = qlController.displayedIndex; 
    if(oldIndex != newIndex) { 
     oldIndex = newIndex; 
     [qlController willChangeValueForKey:@"displayedIndex"]; 
     [qlController didChangeValueForKey:@"displayedIndex"]; 
    } 

कुछ मैं इसे इनलाइन यहाँ लिखा था तो वहाँ लिखने की त्रुटियों और गलतियों होने के लिए बाध्य कर रहे हैं लेकिन मुझे लगता है कि सामान्य दृष्टिकोण काम कर सकता था।

1

// 1। एक स्थिर संदर्भ घोषित करें:

static void *changePageContext = &changePageContext; 

// 2। viewDidLoad में अपने QLPreviewController के लिए एक मजबूत रेफरी की currentPreviewItemIndex संपत्ति के लिए पर्यवेक्षक के रूप में स्वयं को जोड़ने:

[self.previewController addObserver:self forKeyPath:@"currentPreviewItemIndex" options:(NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld) context:changePageContext]; 

// 3। पर्यवेक्षक विधि को कार्यान्वित करें:

-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object 
    change:(NSDictionary *)change context:(void *)context 
{ 
    if (context == changePageContext) 
    { 
     NSLog(@"newValue:%ld",(long)self.previewController.currentPreviewItemIndex); 
    } 
    else 
    { 
     // Any unrecognized context must belong to super 
     [super observeValueForKeyPath:keyPath 
          ofObject:object 
           change:change 
           context:context]; 
    } 
} 

// 4। पर्यवेक्षक को दृश्य में हटाएं WillDisappear:

-(void)viewWillDisappear:(BOOL)animated 
{ 
    if (![[self.navigationController viewControllers] containsObject: self]) 
    { 
     [self.previewController removeObserver:self forKeyPath:@"currentPreviewItemIndex"]; 
    } 
}