2012-12-09 19 views
7

UICollectionViewDelegateFlowLayout में मोनो टच में sizeForItem (GetSizeForItem) नामक एक विधि है।मैं UICollectionViewController में GetSizeForItem कार्यान्वयन कैसे प्रदान कर सकता हूं?

लेकिन मैं प्रतिनिधि को स्पष्ट रूप से प्रदान नहीं कर रहा हूं- इसके बजाय, मैं UICollectionViewController से विरासत में हूं।
यह डेटा स्रोत और प्रतिनिधि कार्यक्षमता को मिश्रित करता है लेकिन इस विधि को ओवरराइड करने के लिए नहीं है।

मैं अपने नियंत्रक को यह जोड़ने की कोशिश की:

[Export ("collectionView:layout:sizeForItemAtIndexPath:")] 
public virtual SizeF GetSizeForItem (UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath) 
{ 
    return new SizeF (100, 100); 
} 

और यह कभी कहा जाता था।

मैं प्रतिनिधि और डेटा स्रोत को अलग करने के बिना इस विधि को कैसे प्रदान करूं?

+0

आप नहीं कर सकते हैं में इस जोड़ें। Obj-C में डेटासोर्स ऑब्जेक्ट प्रतिनिधि प्रोटोकॉल को अपना सकता है। यह मोनोटच में सकारात्मक नहीं है। – svn

+0

@ एसवीएन: तो एकमात्र समाधान नियंत्रक से छुटकारा पाने और इसके बजाय डेटा स्रोत और प्रतिनिधि का उपयोग करना है? यदि ऐसा है, तो कृपया इसे उत्तर के रूप में पोस्ट करें ताकि मैं इसे स्वीकार कर सकूं। –

+0

आप अपने उप-वर्गीकृत नियंत्रक के अंदर कस्टम प्रतिनिधि और डेटासोर्स को परिभाषित और असाइन कर सकते हैं। इस तरह आप अपने कस्टम कंट्रोलर का बाहरी रूप से उपयोग कर सकते हैं और आंतरिक रूप से अपने कस्टम प्रतिनिधियों का उपयोग कर सकते हैं – svn

उत्तर

11

आप नहीं कर सकते। Obj-C में व्यू कंट्रोलर (या कोई भी वर्ग) ऑब्जेक्ट प्रतिनिधि प्रोटोकॉल को अपना सकता है। यह मोनोटच में सकारात्मक नहीं है। आपने एक प्रतिनिधि उदाहरण का उपयोग करने के लिए दिया था। लेकिन इस के लिए एक निजी वर्ग

public class CustomCollectionViewController:UICollectionViewController 
{ 
    public CustomCollectionViewController():base() 
    { 

     this.CollectionView.Delegate = new CustomViewDelegate(); 

    } 

    class CustomViewDelegate: UICollectionViewDelegateFlowLayout 
    { 

     public override System.Drawing.SizeF GetSizeForItem (UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath) 
     { 
      return new System.Drawing.SizeF (100, 100); 
     } 
    } 
} 
+0

करने का सामान्य मोनोटच तरीका है, यह मेरे लिए काम करता है, धन्यवाद। –

+0

नोट, हालांकि, इस मामले में 'चाहिएसइलेक्ट इटैम' जैसी विधियां और अन्य प्रतिनिधि विधियों को आपके प्रतिनिधि पर ** ** ** आपके नियंत्रक पर नहीं कहा जाएगा। –

+1

जैसा कि यह सेब दस्तावेज़ों के अनुसार होना चाहिए। UICollectionViewDelegateFlowLayout UICollectionViewDelegate को प्राप्त करता है जो उन विधियों को लागू करता है – svn

8

संपादित किया जा सकता है: एक प्रतिनिधि उपवर्ग बनाने की जरूरत के बिना , अपने UICollectionviewSource

/** Other methods such as GetItemsCount(), GetCell()... goes here **/ 

[Export ("collectionView:layout:sizeForItemAtIndexPath:"), CompilerGenerated] 
public virtual CGSize GetSizeForItem (UICollectionView collectionView, UICollectionViewLayout layout, NSIndexPath indexPath) 
{ 
    return new CGSize (width, height); 
} 
+1

धन्यवाद यह ठीक काम कर रहा है :) –