覆盖UICollectionViewController

时间:2015-09-22 08:27:00

标签: c# ios xamarin xamarin.ios uicollectionview

我想使用CustomCollectionView代替UICollectionView使用的默认UICollectionViewController。如何覆盖默认属性的类型?

我以SimpleCollectionView example为基础。我试过这个

public SimpleCollectionViewController (UICollectionViewLayout layout) : base (layout)
{
    CollectionView = new CustomCollectionView (View.Frame, layout);
    // ...
}

但它崩溃了,因为AnimalCell尚未注册。然后我试了

public override CustomCollectionView CollectionView {
    get;
    set;
}

但它没有编译,因为overriden成员的类型为UICollectionView

如何覆盖默认的UICollectionView,同时保留内存管理,布局,位置,大小等?

修改

现在我尝试使用以下getter / setter:

public new CustomCollectionView CollectionView {
    get {
        if (CollectionView == null) {
            CollectionView = new CustomCollectionView ();
        }
        return CollectionView;
    }
    set {
        CollectionView = value;
    }
}

这是我的构造函数:

public SimpleCollectionViewController (UICollectionViewLayout layout) : base (layout)
{
    CollectionView = new CustomCollectionView (View.Frame, layout);
    // ...
}

然后我想在我的CustomCollectionView类中使用以下构造函数:

public CustomCollectionView() : base()
{
}

但是available constructors可以看出这是不允许的。我不知道哪个构造函数是合适的。对我来说唯一有意义的是在使用此

时导致堆栈溢出
public new CustomCollectionView CollectionView {
    get {
        if (CollectionView == null) {
            CollectionView = new CustomCollectionView (View.Frame, Layout);
        }
        return CollectionView;
        }
    set {
        CollectionView = value;
    }
}

编辑2:

现在我尝试了这个属性声明

private CustomCollectionView _collectionView;
public new CustomCollectionView CollectionView {
    get {
        if (_collectionView == null) {
            _collectionView = new CustomCollectionView (View.Frame, new UICollectionViewFlowLayout());
        }
        return _collectionView;
    }
    set {
        _collectionView = value;
    }
}

并在SimpleCollectionViewController的构造函数中,我这样做

CollectionView = new CustomCollectionView (View.Frame, layout);

再次它不起作用(崩溃),因为标题未正确注册,当试图在

出列时
var headerView = (Header)collectionView.DequeueReusableSupplementaryView (elementKind, headerId, indexPath);

我做错了什么?

0 个答案:

没有答案