7

UICollectionViewDelegateFlowLayoutには、 sizeForItem( MonoTouchのGetSizeForItem )というメソッドがあります。

ただし、デリゲートを明示的に提供していません。代わりに、UICollectionViewControllerから継承しています。
データソースとデリゲート機能が混在していますが、オーバーライドするこのメソッドはありません。

これをコントローラーに追加してみました:

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

そしてそれは決して呼ばれませんでした。

デリゲートとデータソースを分離せずにこのメソッドを提供するにはどうすればよいですか?

4

2 に答える 2

12

できません。Obj-Cでは、viewcontroller(または任意のクラス)オブジェクトがデリゲートプロトコルを採用できます。これはMonotouchでは不可能です。デリゲートインスタンスを使用するように指定しました。しかし、これはプライベートクラスにすることができます

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);
        }
    }
}
于 2012-12-10T12:13:55.687 に答える
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);
}
于 2015-08-14T11:26:25.097 に答える