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 中,视图控制器(或任何类)对象可以采用委托协议。这在 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 回答