如何在UICollectionViewController中提供GetSizeForItem实现?

时间:2012-12-09 22:07:18

标签: xamarin.ios uicollectionview xamarin

UICollectionViewDelegateFlowLayout在MonoTouch中有一个名为sizeForItemGetSizeForItem)的方法。

但是我没有明确地提供委托 - 相反,我继承了UICollectionViewController。
它混合了数据源和委托功能,但没有这种方法来覆盖。

我尝试将其添加到我的控制器中:

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

并且它从未被调用过。

如何在不借助分离委托和数据源的情况下提供此方法?

2 个答案:

答案 0 :(得分:11)

你做不到。在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);
        }
    }
}

答案 1 :(得分: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);
}