Dan Abramov
Dan Abramov

Reputation: 268275

How can I provide GetSizeForItem implementation in UICollectionViewController?

UICollectionViewDelegateFlowLayout has a method called sizeForItem (GetSizeForItem in MonoTouch).

But I'm not providing the delegate explicitly—instead, I'm inheriting from UICollectionViewController.
It mixes data source ands delegate functionality but doesn't have this method to override.

I tried adding this to my controller:

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

and it was never called.

How do I provide this method without resorting to separating delegate and data source?

Upvotes: 7

Views: 3630

Answers (2)

Iain Smith
Iain Smith

Reputation: 9703

Edit: Without the need of creating a delegate subclass, add this in your 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);
}

Upvotes: 9

svn
svn

Reputation: 1408

You can't. In Obj-C the viewcontroller (or any class) object can adopt the delegate protocol. This is not posible in Monotouch. You gave to use a delegate instance. But this can be a private class

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);
        }
    }
}

Upvotes: 13

Related Questions