Swift5初心者です.ストーリーボードは使っておりません.
UIDragInteraction
,UIDropInteraction
を用いてドラッグ&ドロップの実装を試みています.
ドロップエリアにオブジェクトをドロップした時,(UIImage
,NSString
クラス等でなくとも)そのオブジェクト自体をそのままドロップエリアに渡して処理を行いたいと考えています.
NSItemProvider
を用いればドロップエリアでドロップ後の処理を行えることが分かったのですが,
NSItemProvider
に準拠したインスタンス(UIImage
,NSString
クラスのオブジェクト等)しか渡せないので,下に示すようにクラスを拡張(継承)してCharacterPanel
クラスのインスタンスも渡せるようにしたいです..
swift=
1class CharacterPanel: UIView, UIDragInteractionDelegate, NSItemProviderReading, NSItemProviderWriting { 2 static var writableTypeIdentifiersForItemProvider: [String] = [] 3 4 func loadData(withTypeIdentifier typeIdentifier: String, forItemProviderCompletionHandler completionHandler: @escaping (Data?, Error?) -> Void) -> Progress? { 5 return nil 6 } 7 8 static var readableTypeIdentifiersForItemProvider: [String] = [] 9 10 static func object(withItemProviderData data: Data, typeIdentifier: String) throws -> Self { 11 return self 12 } 13 14 15. 16. 17. 18 19 20} 21
このように記述した場合,return self
の箇所でエラー(Cannot convert return expression of type 'Self.Type' to return type 'Self'
)が出てきます.
また,ドロップされる方の実装(dropInteraction
のみ)は下のようになっています.
func dropInteraction(_ interaction: UIDropInteraction, performDrop session: UIDropSession) { for item in session.items { if item.itemProvider.canLoadObject(ofClass: CharacterPanel.self as! NSItemProviderReading.Type) { item.itemProvider.loadObject(ofClass: CharacterPanel.self as! NSItemProviderReading.Type) { (object, error) in . . . } } }
自分の理解が追いついていない部分も多々ありますが,どのように実装すれば実現可能でしょうか.
この方法以外でも,機能実現の別のアイディア等があれば教えていただきたいです.
よろしくお願いいたします.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。