C# 覆盖UICollectionViewController中的集合视图
我想使用我的C# 覆盖UICollectionViewController中的集合视图,c#,ios,xamarin,xamarin.ios,uicollectionview,C#,Ios,Xamarin,Xamarin.ios,Uicollectionview,我想使用我的CustomCollectionView而不是UICollectionViewController使用的默认UICollectionView。如何覆盖默认属性的类型 我以这个为基础。我试过这个 public SimpleCollectionViewController (UICollectionViewLayout layout) : base (layout) { CollectionView = new CustomCollectionView (View.Frame,
CustomCollectionView
而不是UICollectionViewController
使用的默认UICollectionView
。如何覆盖默认属性的类型
我以这个为基础。我试过这个
public SimpleCollectionViewController (UICollectionViewLayout layout) : base (layout)
{
CollectionView = new CustomCollectionView (View.Frame, layout);
// ...
}
但它崩溃了,因为AnimalCell
尚未注册。然后我试着
public override CustomCollectionView CollectionView {
get;
set;
}
但是它不会编译,因为被重写的成员的类型是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()
{
}
但这是不被允许的,正如我们可以看到的那样。我不知道哪个构造函数是合适的。对我来说唯一有意义的一个方法是在使用此方法时导致堆栈溢出
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);
我做错了什么?你为什么投-1票有什么解释吗?也许我可以改进和编辑我的问题。如果你觉得这个问题对你来说太简单,你可以留下一个答案。
UICollectionViewController
是一个方便的类,我想在不创建新属性和复制内容的情况下交换一个属性的类型。我也可以使用普通的UIViewController
并在那里添加所有内容,但我问是否有办法使用方便的类,因为内存管理是为我处理的。