当 NSCollectionView 滚动到内容末尾时加载更多数据 (macOS)

Load more data when NSCollectionView is scrolled to end of content (macOS)

在我的 macOS 应用程序中,我有一个 NSCollectionView。我下载了数据并将其放在集合视图中,现在我想在用户滚动到可用内容底部时加载更多数据。在 iOS 上,我可以在 UIScrollViewDelegate.scrollViewDidEndDragging(_:willDecelerate:) 上执行类似的操作,但我不确定如何在 macOS 上执行此操作。

如何在用户滚动到视图底部时触发加载?

我在 iOS 上使用的一种可能方法是在显示特定项目时触发加载。在 macOS 上,这可以使用 NSCollectionViewDelegatecollectionView(_:willDisplay:forRepresentedObjectAt) 方法来完成。像这样:

func collectionView(_ collectionView: NSCollectionView, willDisplay item: NSCollectionViewItem, forRepresentedObjectAt indexPath: IndexPath) {
    if indexPath == self.lastIndexPath {
        loadNextSection()
    }
}

func loadNextSection() {
    guard let self.loading == false else {
        return
    }
    self.loading = true
    self.loader.loadSection(nextSection) { objects in
        self.nextSection += 1
        self.sections.append(objects)
        self.lastIndexPath = IndexPath(indexes: [self.sections.count, objects.count])
        DispatchQueue.main.async {
            self.collectionView.reloadData()
        }
    }
}

看来,我解决了。创建一个观察。并连接 nscollectionview 的 scrollview 并在我滚动时使用它..:[=​​11=]

if (self.scrollViewColl.verticalScroller?.floatValue.isEqual(to: 1.0))! && loading == false

或者您可以检查 indexPath.item 是否等于 data source array count,如果是,则调用在数据源数组中加载数据的方法。

func collectionView(_ collectionView: NSCollectionView, willDisplay item: NSCollectionViewItem, forRepresentedObjectAt indexPath: IndexPath) {
    if indexPath.item == self.data_source_array.count-1 {
       self.method_to_load_more_data()
    }
}

添加更多数据后不要忘记reloadData()集合视图。