2012-12-09 14 views
7

UICollectionViewDelegateFlowLayout, sizeForItem (MonoTouch'da GetSizeForItem) adlı bir yönteme sahiptir.UICollectionViewController'da GetSizeForItem uygulamasını nasıl sağlayabilirim?

Ancak temsilci açıkça belirtmiyorum; bunun yerine, UICollectionViewController ürününden miras alıyorum.
Veri kaynağını ve temsilci işlevlerini karıştırır, ancak geçersiz kılmak için bu yönteme sahip değildir.

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

ve hiç çağrılmadı:

benim kontrolöre bu ekleme çalıştı.

Temsilci ve veri kaynağını ayırmaya başvurmadan bu yöntemi nasıl sağlayabilirim?

+0

Yapamazsın bu ekleyin. Obj-C'de veri kaynağı nesnesi delege protokolünü kabul edebilir. Bu Monotouch'ta mümkün değil. – svn

+0

@svn: Tek çözüm kontrolörden kurtulmak ve bunun yerine veri kaynağı ve temsilci kullanmak mı? Eğer durum buysa, lütfen cevap olarak gönderin, böylece kabul edebilirdim. –

+0

Alt sınıf denetleyicinizde özel temsilci ve veri kaynağı tanımlayabilir ve atayabilirsiniz. Bu şekilde, sadece sizin kişisel denetleyicinizi kullanabilirsiniz ve içtenlikle sizin özel delegelerinizi kullanabilirsiniz – svn

cevap

11

Yapamazsınız. Obj-C'de viewcontroller (veya herhangi bir sınıf) nesnesi delege protokolünü kabul edebilir. Bu Monotouch'ta mümkün değil. Bir temsilci örneğini kullanmaya karar verdiniz. Ama bu özel sınıf

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

Bu benim için çalıştı, teşekkür ederim. –

+0

Ancak, bu durumda 'ShouldSelectItem' gibi yöntemlerin ve diğer delege yöntemlerinin denetleyicinizde temsilci ve ** değil ** çağrılacağını unutmayın. –

+1

Elma belgelerine göre olması gerektiği gibi. UICollectionViewDelegateFlowLayout, bu yöntemleri uygulayan UICollectionViewDelegate devralır – svn

8

Edit olabilir: bir temsilci alt sınıf oluşturma ihtiyacı olmadan , senin 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

Çalışma güzel teşekkürler :) –