How can I provide GetSizeForItem implementation in UICollectionViewController?
uicollectionview, xamarin, xamarin.ios
Solution
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);
}
}
}
Problem
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?