我试图在MvxCollectionViewController中提供页眉和页脚视图,但我遇到了麻烦。通常,使用UICollectionViewController,我会覆盖GetViewForSupplementaryElement方法,如下所示:
public override UICollectionReusableView GetViewForSupplementaryElement (UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
{
var someHeaderOrFooterView = (HeaderOrFooterView) collectionView.DequeueReusableSupplementaryView (elementKind, elementId, indexPath);
return someHeaderOrFooterView;
}
MvxCollectionViewControllers似乎没有像UICollectionViewController那样获取GetViewForSupplementaryElement方法的委托回调。
是否有另一种使用MvxCollectionViewController指定CollectionView的页眉和页脚的方法?
答案 0 :(得分:6)
标准步骤应该有效(它们在这里工作......):
为布局
中的标题提供尺寸 HeaderReferenceSize = new System.Drawing.SizeF(100, 100),
为标题实现一个类
public class Header : UICollectionReusableView
{
UILabel label;
public string Text
{
get { return label.Text; }
set { label.Text = value; SetNeedsDisplay(); }
}
[Export("initWithFrame:")]
public Header(System.Drawing.RectangleF frame)
: base(frame)
{
label = new UILabel() { Frame = new System.Drawing.RectangleF(0, 0, 300, 50), BackgroundColor = UIColor.Yellow };
AddSubview(label);
}
}
注册该课程
CollectionView.RegisterClassForSupplementaryView(typeof(Header), UICollectionElementKindSection.Header, headerId);
实施GetViewForSupplementaryElement
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
{
var headerView = (Header)collectionView.DequeueReusableSupplementaryView(elementKind, headerId, indexPath);
headerView.Text = "Supplementary View";
return headerView;
}
刚刚在这里测试了这些步骤,它们可以在我的示例应用中运行(基于https://github.com/slodge/NPlus1DaysOfMvvmCross/tree/master/N-11-KittenView_Collections)。
除了>有一个公开的问题可以提供可绑定的补充视图 - https://github.com/slodge/MvvmCross/issues/339 - 但是这个问题不应该影响基本的集合视图操作。
答案 1 :(得分:1)
使用MvvmCross时遇到同样的问题,MvxCollectionViewController永远不会调用
public override UICollectionReusableView GetViewForSupplementaryElement
我使用“Perfem_element”的答案解决了这个问题。
public class MyCollectionViewSource: MvxCollectionViewSource
{
public MyCollectionViewSource(UICollectionView collectionView, NSString defaultCellIdentifier) : base(collectionView, defaultCellIdentifier)
{
}
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
{
var headerView = (MyHeader)collectionView.DequeueReusableSupplementaryView(elementKind, MyHeader.Key, indexPath);
headerView.Text = "Supplementary View";
return headerView;
}
最后在MvxViewController中:
var source = new MyCollectionViewSource (CollectionView, ListadoCollectionCell.Key);
由于
答案 2 :(得分:0)
我和MvvmCross有同样的问题。我能够通过继承MvxCollectionViewSource类并重写GetViewForSupplementaryElement方法来解决它:
public class MyCollectionViewSource: MvxCollectionViewSource
{
public TimelineSource(UICollectionView collectionView, NSString defaultCellIdentifier) : base(collectionView, defaultCellIdentifier)
{
}
public override UICollectionReusableView GetViewForSupplementaryElement(UICollectionView collectionView, NSString elementKind, NSIndexPath indexPath)
{
var headerView = (MyHeader)collectionView.DequeueReusableSupplementaryView(elementKind, MyHeader.Key, indexPath);
headerView.Text = "Supplementary View";
return headerView;
}
}