首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 4在带单元格的collectionView中实现拖放

Swift 4在带单元格的collectionView中实现拖放
EN

Stack Overflow用户
提问于 2018-09-25 16:17:20
回答 1查看 2.6K关注 0票数 1

我有一些自定义类,这些类创建了一个对象数组,然后为我的UICollectionView动态地转化为单元格,这些类本质上都如下所示:

代码语言:javascript
复制
import Foundation

class BoardNote : NSObject {    
   var note_id : String = ""
   var itemType : String = ""
   var added_by : Any = ""
   var link : Any = ""
   var content : String = ""
   var board_id : Any = ""
   var date_added : Any = ""
 }

然后使用该类的一个实例创建如下所示的单元格:

代码语言:javascript
复制
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: 
"noteViewCell", for: indexPath) as! NoteViewCell
        cell.content.text = (itemArray[indexPath.row] as! 
BoardNote).content
        cell.noteId = (itemArray[indexPath.row] as! BoardNote).note_id
        print("made note cell")
        return cell

当我试图在我的集合视图中实现基本拖放时,我会得到错误“无法将"BoardNote”类型的值转换为'NSObject‘。

我看到,我可能还需要将它作为类NSItemProviderWriting的扩展,但我不知道如何实现。

下面是我的DragDelegate扩展的开头,在第4行发生错误,这是一个线程1: signal SIGABRT:

代码语言:javascript
复制
extension BoardViewController : UICollectionViewDragDelegate
{
func collectionView(_ collectionView: UICollectionView, 
itemsForBeginning session: UIDragSession, at indexPath: IndexPath) -> 
[UIDragItem]
{
    let item = self.itemArray[indexPath.row]
    let itemProvider = NSItemProvider(object: item as! NSObject as! 
NSItemProviderWriting)
    let dragItem = UIDragItem(itemProvider: itemProvider)
    dragItem.localObject = item
    return [dragItem]
}

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-25 17:39:34

首先,您需要删除在这一行中强制转换的项:

代码语言:javascript
复制
NSItemProvider(object: item as! NSObject as! NSItemProviderWriting)

使之成为:

代码语言:javascript
复制
 NSItemProvider(object: item)

然后,对错误进行自我解释:您需要使您的自定义类符合NSItemProviderWriting和NSItemProviderReading协议,然后从协议中添加所需的存根方法:

代码语言:javascript
复制
class BoardNote : NSItemProviderWriting, NSItemProviderReading{    
   var note_id : String = ""
   var itemType : String = ""
   var added_by : Any = ""
   var link : Any = ""
   var content : String = ""
   var board_id : Any = ""
   var date_added : Any = ""
 }

注意:您可以省略NSObject继承,这里是为什么

您只需单击错误红色信号,然后单击"Fix“即可添加协议存根。

这里关于如何进行拖放的教程,这样您就可以检查如何填充NSItemProviderWriting和NSItemProviderReading协议存根。

这里类似的问题,您可以检查

基本上,我所链接的问题是在您的同一行NSItemProvider(object: item)中询问一个问题,但是问题是开发人员不是给方法一个类实例,而是给这个方法一个类名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52502619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档