- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 UICollectionViewDiffableDataSource和一个 NSFetchedResultsController
填充我的 UICollectionView
在我的 UIViewController
.
为了添加重新排序单元格的能力,我添加了一个 UILongPressGestureRecognizer
和子类 UICollectionViewDiffableDataSource
为了使用它是canMoveItemAt:
和 moveItemAt:
方法。
对单元格重新排序时,会发生以下情况:
moveItemAt:
被调用,我更新对象位置属性并保存 MOC controllerDidChangeContent:
的NSFetchedResultsControllerDelegate
被调用,我从当前的 fetchedObjects 创建一个新快照并应用它。 dataSource?.apply(snapshot, animatingDifferences: true)
细胞立即转换位置。如果我设置
animatingDifferences: false
它有效,但所有单元格都重新加载
明显 .
UICollectionViewDiffableDataSource
上实现单元格重新排序?和一个
NSFetchedResultsController
?
// ViewController
func createSnapshot(animated: Bool = true) {
var snapshot = NSDiffableDataSourceSnapshot<Int, Favorite>()
snapshot.appendSections([0])
snapshot.appendItems(provider.fetchedResultsController.fetchedObjects ?? [])
dataSource?.apply(snapshot, animatingDifferences: animated)
}
// NSFetchedResultsControllerDelegate
func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) {
createSnapshot(animated: false)
}
// Subclassed UICollectionViewDiffableDataSource
override func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
provider.moveFavorite(from: sourceIndexPath.row, to: destinationIndexPath.row)
}
// Actual cell moving in a provider class
public func moveFavorite(from source: Int, to destination: Int) {
guard let favorites = fetchedResultsController.fetchedObjects else { return }
if source < destination {
let partialObjects = favorites.filter({ $0.position <= destination && $0.position >= source })
for object in partialObjects {
object.position -= 1
}
let movedFavorite = partialObjects.first
movedFavorite?.position = Int64(destination)
}
else {
let partialObjects = favorites.filter({ $0.position >= destination && $0.position <= source })
for object in partialObjects {
object.position += 1
}
let movedFavorite = partialObjects.last
movedFavorite?.position = Int64(destination)
}
do {
try coreDataHandler.mainContext.save()
} catch let error as NSError {
print(error.localizedDescription)
}
}
最佳答案
我对同一问题的解决方案是将 UICollectionViewDiffableDataSource 子类化并在子类中实现 canMoveItemAt 方法以回答 true。
如果 .ended 的 longPressAction 案例做了三件事,动画似乎对我来说很好用:
class PGLDiffableDataSource: UICollectionViewDiffableDataSource<Int, Int> {
override func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
return true
}
}
关于ios - 使用 UICollectionViewDiffableDataSource 和 NSFetchedResultsController 重新排序单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58029290/
我正在尝试理解 UICollectionViewDiffableDataSource 和 NSDiffableDataSourceSnapshot。 我在下面创建了一个非常粗糙的版本。基本上在加载时它
在使用传统的UICollectionView时,我们经常使用如下代码来处理空状态: func collectionView(_ collectionView: UICollectionView, nu
我创建了以下演示 View Controller 以在最小示例中重现该问题。 在这里,我使用 UICollectionViewDiffableDataSource 将相同数据的快照重复应用到相同的集合
我正在使用 UICollectionViewDiffableDataSource 来填充我的 UICollectionView。通过 REST API 收到项目列表后,我创建了一个新快照并像这样应用它
我采用了新的 UICollectionViewDiffableDataSource。每次删除项目时,我都会应用数据源快照: var snapshot = NSDiffableDataSourceSna
我正在构建一个带有 Collection View 的 View Controller ,使用(有点)新的可区分数据源和可组合的 Collection View 布局。我制作了自己的 Section
我有一个 UICollectionView,其中我使用 UICollectionViewCompositionalLayout 布置了两个部分(一个水平滚动,一个垂直滚动)。我将其与 UICollec
我正在尝试将 iOS 13 中内置的一些新差异类与 Core Data 一起使用。我遇到的问题是 controllerdidChangeContentWith没有按预期工作。它传递给我一个快照引用,它
我正在使用 UICollectionViewDiffableDataSource对于我的 collectionView 的数据源。我的 CollectionView 中有 3 个部分: enum Se
我正在使用 UICollectionViewDiffableDataSource和一个 NSFetchedResultsController填充我的 UICollectionView在我的 UIVie
我正在尝试实现 UICollectionViewDiffableDataSource我的 collectionView .我的代码编译得很好,但是我第一次对它应用快照时一直遇到这个错误,并出现以下错误
我正在使用 UICollectionView 和 UICollectionViewDiffableDataSource 并异步和同步获取数据以填充 View 。应用程序崩溃并显示以下消息:“由于未捕获
我需要使用 moveItem(at:to:) 委托(delegate)方法来移动我的 Collection View 单元格。当我实现数据源委托(delegate)方法时它工作正常,但我需要将我的数据
我是一名优秀的程序员,十分优秀!