【问题标题】:Custom view for Drag and Drop拖放的自定义视图
【发布时间】:2017-07-17 09:43:51
【问题描述】:

我已将UITableView 设置为使用新的拖放 API。

if #available(iOS 11, *) {
    self.tableView.dragDelegate = self
    self.tableView.dropDelegate = self
    self.tableView.dragInteractionEnabled = true
    navigationController?.navigationBar.prefersLargeTitles = false
}

现在,我实现了以下方法,以便能够为 d&d 使用自定义视图。

@available(iOS 11.0, *)
func dragInteraction(_ interaction: UIDragInteraction, previewForLifting item: UIDragItem, session: UIDragSession) -> UITargetedDragPreview? {
    print("Custom Preview method called!")
    let test = UITextView.init(frame: CGRect.init(x: 0, y: 0, width: 200, height: 200))
    test.text = "sfgshshsfhshshfshsfh"
    let dragView = interaction.view!
    let dragPoint = session.location(in: dragView)
    let target = UIDragPreviewTarget(container: dragView, center: dragPoint)
    return UITargetedDragPreview(view: test, parameters:UIDragPreviewParameters(), target:target)
}

但是,这个方法永远不会被调用。我从来没有看到print() 或我的自定义视图。关于我做错了什么有什么想法吗?

【问题讨论】:

  • 您找到解决方案了吗?

标签: ios uitableview


【解决方案1】:

创建UIDragItem时必须设置previewProvider属性。

let dragItem = UIDragItem(...)
dragItem.previewProvider = {
    print("Custom Preview method called!")
    let test = UITextView.init(frame: CGRect.init(x: 0, y: 0, width: 200, height: 200))
    test.text = "sfgshshsfhshshfshsfh"
    return UIDragPreview(view: test)
}

见:https://developer.apple.com/documentation/uikit/uidragitem/2890972-previewprovider?language=objc

【讨论】:

    【解决方案2】:

    您使用的是 iPhone 吗?截至 2017 年 11 月 25 日,我不确定它目前是否适用于客户 UIViewController,具体如下:

    • 我下载了 Apple sample project 以便在 iPad 上拖放
    • 我在dragInteraction 中添加了一个断点并确认我可以到达它
    • 我将目标修改为通用应用程序(也就是 iPhone)
    • 我在 iPhone 8 设备上运行,没有到达断点

    作为进一步的建议,UITableViewControllerUICollectionViewController 都有一个名为 dragInteractionEnabled 的属性。对于 iPhone 设备,该属性默认为false,更重要的是,该属性甚至没有在UIViewController 中定义得更高。

    【讨论】:

    • 在你的视图上你应该设置.dragInteractionEnabled = true,在你的UIDragInteraction对象上设置.isEnabled = true
    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 2011-02-05
    • 2016-09-07
    • 1970-01-01
    • 2015-03-08
    • 2019-06-10
    相关资源
    最近更新 更多