当 NSCollectionView 滚动到内容末尾时加载更多数据 (macOS)
Load more data when NSCollectionView is scrolled to end of content (macOS)
在我的 macOS 应用程序中,我有一个 NSCollectionView
。我下载了数据并将其放在集合视图中,现在我想在用户滚动到可用内容底部时加载更多数据。在 iOS 上,我可以在 UIScrollViewDelegate.scrollViewDidEndDragging(_:willDecelerate:)
上执行类似的操作,但我不确定如何在 macOS 上执行此操作。
如何在用户滚动到视图底部时触发加载?
我在 iOS 上使用的一种可能方法是在显示特定项目时触发加载。在 macOS 上,这可以使用 NSCollectionViewDelegate
的 collectionView(_: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()
集合视图。
在我的 macOS 应用程序中,我有一个 NSCollectionView
。我下载了数据并将其放在集合视图中,现在我想在用户滚动到可用内容底部时加载更多数据。在 iOS 上,我可以在 UIScrollViewDelegate.scrollViewDidEndDragging(_:willDecelerate:)
上执行类似的操作,但我不确定如何在 macOS 上执行此操作。
如何在用户滚动到视图底部时触发加载?
我在 iOS 上使用的一种可能方法是在显示特定项目时触发加载。在 macOS 上,这可以使用 NSCollectionViewDelegate
的 collectionView(_: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()
集合视图。