【问题标题】:Custom CollectionView, how to get current items on ScrollingEnded自定义 CollectionView,如何在 ScrollingEnded 上获取当前项目
【发布时间】:2020-07-17 13:17:03
【问题描述】:

我正在创建一个自定义布局 collectionView,类似于文档 here 中的内容。我在 collectionView 之外有一些文本视图,我想根据屏幕中间的当前项目来填充,我知道我可以使用CollectionView.IndexPathsForVisibleItems 获取当前可见项目。我的问题是我怎样才能到达scrollingEnded 事件或类似事件,以便我可以在那里调用CollectionView.IndexPathsForVisibleItems 并获取我需要填充文本字段的数据?

我尝试在MyCustomCollectionViewSource 中覆盖ScrollAnimationEnded,但由于某种原因它永远不会触发。我也想过可能会使用SupplementaryView,但我找不到任何与自定义布局一起使用的示例代码。

【问题讨论】:

  • 您能否添加更多描述,可能带有问题的图片?

标签: xamarin xamarin.ios uicollectionview


【解决方案1】:

我的问题是我如何才能到达 scrollingEnded 事件或类似事件,以便我可以在那里调用 CollectionView.IndexPathsForVisibleItems 并获取填充文本字段所需的数据?

有一个Scrolled的方法可以用来实现(根据ContentOffset来检查是否需要加载更多),这个方法需要在UICollectionViewDelegate里面。

public class MyCollectionDelegate : UICollectionViewDelegate {
    #region Computed Properties
    public CollectionView mCollectionView { get; set;}
    #endregion

    #region Constructors
    public MyCollectionDelegate (CollectionView collectionView)
    {
        // Initialize
        mCollectionView = collectionView;
    }
    #endregion

    public override void Scrolled(UIScrollView scrollView)
    {
        //base.Scrolled(scrollView);
        if (scrollView.ContentOffset.Y + scrollView.Frame.Size.Height - scrollView.ContentSize.Height > 30)
        {
            // load more data 
        }
}

然后为 CollectionView 设置Delegate 如下:

 this.collectionView.Delegate =  new MyCollectionDelegate(this.collectionView);

【讨论】:

  • 我会尝试更多地使用它,但现在它像 3-4 次一样进入 If 语句,因此“滚动结束”并不可靠。如果我让它工作,我会提供更新。
  • @cymenx 太好了,在这里期待你的消息 :-)
  • 更新:我必须使用 DecelerationEnded 它完全按照我的需要工作。
  • 好吧,太酷了!很高兴能解决这个问题。 :-)
【解决方案2】:

我使用了DecelerationEnded,这解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    • 2012-05-15
    • 2016-02-07
    • 2020-09-13
    相关资源
    最近更新 更多