我的故事板设置如下:
如你所见,我有一个主屏幕。它可以访问导航控制器。它有两个ContainerView,一个用作侧窗,另一个用作主要内容。我计划在需要时将内容交换到这个主内容容器中。
我希望在此容器中显示的一件事是,从侧窗选择它时,是一个显示人物的单元格的CollectionView。每个单元格都有一张照片和人员的详细信息。
我可以为CollectionView找到的最佳代码示例是Xamarin StateRestoration示例项目。它包括一个故事板。在我自己的特定故事板上工作时,我尽可能地遵循了食谱。
问题现在是用于填充CollectionView中每个单元格的GetCell(UICollectionView collectionView, NSIndexPath indexPath)
方法未被调用。据我所知,我应该实例化CollectionViewController的数据源属性。我已经在AppDelegate和我的CollectionViewController本身的ViewDidLoad中尝试了这个,并且GetCell仍未被调用。这是为什么?
任何帮助表示赞赏!如果您需要更多信息,请让我编辑。
答案 0 :(得分:1)
您需要设置数据源和委托。正如您所提到的,您已经设置了数据源。要设置委托在xcode中打开故事板,请选择UICollectionView
并控制拖动到其父视图控制器。看看这个gif。
还要确保在目标视图控制器中实现IUICollectionViewSource
接口
public partial class DetailViewController : UIViewController, IUICollectionViewSource
{
protected DetailViewController(IntPtr handle) : base(handle)
{
// Note: this .ctor should not contain any initialization logic.
}
public nint GetItemsCount(UICollectionView collectionView, nint section)
{
return 10;
}
public UICollectionViewCell GetCell(UICollectionView collectionView, NSIndexPath indexPath)
{
var cell = collectionView.DequeueReusableCell("PersonCell", indexPath) as UICollectionViewCell;
return cell;
}
}
编辑1:
您也可以通过编程方式执行此操作。输入故事板,在窗口小部件属性中设置UICollectionView
- PersonCollection
的名称。然后在视图控制器后面的代码覆盖ViewDidLoad
并设置WeakDelegate
和WeakDataSource
(弱,因为我们绝对不想为iOS创建循环引用和内存泄漏)
public override void ViewDidLoad()
{
base.ViewDidLoad();
PersonCollection.WeakDataSource = this;
PersonCollection.WeakDelegate = this;
}
希望这有帮助!