我有一个集合视图,它显示一个名为“claimData”的自定义数据模型(struct)中排列的数据。
claimData声明:
struct claimData {
var image = UIImage()
var imageTitle = String()
var hasCustomDescription = Bool()
var customDescription = String()
var isAnInitial = Bool()
var isDamage = Bool()
var isUnrelated = Bool()
var isAnOption = Bool()
var isACondition = Bool()
}我通过sharedInstance共享这些数据的状态,因为我使用的是浮动面板。
class PageDataSource {
var theData: ReviewDataController?
static let sharedInstance = PageDataSource()
private init() {}
}ReviewDataController只是持有一个名为"tableViewReviewData“的claimData数组。
我试图在浮动面板的collectionView中实现拖放功能,但我似乎无法让itemProvider与我的自定义数据模型一起工作。
这是我目前拥有的:
func collectionView(_ collectionView: UICollectionView, itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> [UIDragItem] {
let item = PageDataSource.sharedInstance.theData?.tableViewReviewData[indexPath.item]
let itemProvider = NSItemProvider(object: item)
let dragItem = UIDragItem(itemProvider: itemProvider)
dragItem.localObject = item
return [dragItem]
}这是我对itemProvider:“参数类型'claimData?‘不符合预期类型'NSItemProviderWriting'"的错误。
谢谢你的帮助,如果你有任何问题,请告诉我!
发布于 2021-07-26 23:08:22
我找到了另一种方法来完成同样的集合视图单元格重新排序操作,该操作可以处理自定义数据,并且设置起来并不难。
@objc func handleLongPressGesture(_ gesture: UILongPressGestureRecognizer) {
guard let collectionView = myCollectionView else {
return
}
switch gesture.state {
case .began:
guard let targetIndexPath = collectionView.indexPathForItem(at: gesture.location(in: collectionView)) else {
return
}
collectionView.beginInteractiveMovementForItem(at: targetIndexPath)
case .changed:
collectionView.updateInteractiveMovementTargetPosition(gesture.location(in: collectionView))
case .ended:
collectionView.endInteractiveMovement()
default:
collectionView.cancelInteractiveMovement()
}
}
func collectionView(_ collectionView: UICollectionView, canMoveItemAt indexPath: IndexPath) -> Bool {
return true
}
func collectionView(_ collectionView: UICollectionView, moveItemAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
if let item = PageDataSource.sharedInstance.theData?.tableViewReviewData.remove(at: sourceIndexPath.row) {
PageDataSource.sharedInstance.theData?.tableViewReviewData.insert(item, at: destinationIndexPath.row)
} else {
print("The item could NOT be moved!!!")
}
}在viewDidLoad中,只需添加一个长按压手势识别器,如下所示:
let gesture = UILongPressGestureRecognizer(target: self,
action: #selector((handleLongPressGesture(_:))))
myCollectionView.addGestureRecognizer(gesture)https://stackoverflow.com/questions/68514048
复制相似问题