我想使用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);
我做错了什么?