【问题标题】:How to get iOS 11 drag and drop working on the iPhone如何让 iOS 11 拖放在 iPhone 上运行
【发布时间】:2018-03-05 15:57:19
【问题描述】:

我一直在尝试新的 iOS 11 拖放功能。这很棒,但它只能在 iPad 上运行。 Apple声称它也适用于iPhone,但我无法让它在那里工作?苹果的说法是假的,还是我做错了什么?

【问题讨论】:

  • @MartinR 是的,但没有接受任何答案,而且答案没有解释为什么我在让它工作时遇到了很多麻烦。我的回答是。

标签: ios drag-and-drop ios11


【解决方案1】:

您正在某些视图上安装 UIDragInteraction 对象,对吗?好吧,默认情况下,拖拽交互的isEnabled 属性在iPhone 上是false(根据isEnabledByDefault 类属性的设备相关值)。

所以要在 iPhone 上打开拖放,只需在创建时将拖动交互的 isEnabled 设置为 true:

override func viewDidLoad() {
    super.viewDidLoad()

    let dragger = UIDragInteraction(delegate: self)
    self.dragView.addInteraction(dragger)
    dragger.isEnabled = true // for iPhone: presto, we've got drag and drop!
}

类似地,对于表格视图或集合视图,正如另一个答案所指出的,您需要将其 dragInteractionEnabled 设置为 true,因为它在 iPhone 上默认也是 false

【讨论】:

  • 这很有帮助。我错过了isEnabled = true,因为我认为默认情况下它是正确的,并且它不适用于 iPhone。
  • @IvanCantarino 是的,这正是棘手的问题:iPad 和 iPhone 的默认设置不同。 Apple 的一个有趣的设计决定。
  • 哇?!我花了几个小时才找到它......:/在文档和 WWDC 视频中的任何地方都没有提到它。在操场上一切都很好,在模拟器/真实设备上什么都没有:D 所以weeeeird
【解决方案2】:

使用 Swift 4 和 iOS 11,根据您的需要,您可以选择以下方法之一来解决您的问题。


#1。允许在 iPhone 上对UITableView 进行拖放交互

UITableView 有一个名为dragInteractionEnabled 的属性。 dragInteractionEnabled 有以下declaration

var dragInteractionEnabled: Bool { get set }

一个布尔值,指示表格视图是否支持应用之间的拖放。

此属性的默认值为 iPad 上的 true 和 iPhone 上的 false。在 iPhone 上将值更改为 true 可以将内容从 table view 拖动到 iPhone 上的另一个应用程序并接收来自其他应用程序的内容。

以下代码显示了如何使用dragInteractionEnabled 以允许在iPhone 上与UItableView 进行拖放交互:

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        /* ... */

        tableView.dragInteractionEnabled = true
    }

}

#2。允许在 iPhone 上对UICollectionView 进行拖放交互

UICollectionView 有一个名为dragInteractionEnabled 的属性。 dragInteractionEnabled 有以下declaration

var dragInteractionEnabled: Bool { get set }

一个布尔值,指示集合视图是否支持应用之间的拖放。

此属性的默认值为 iPad 上的 true 和 iPhone 上的 false。在 iPhone 上将值更改为 true 可以将内容从集合视图拖动到 iPhone 上的另一个应用程序并接收来自其他应用程序的内容。

以下代码显示了如何使用dragInteractionEnabled 以允许在iPhone 上与UICollectionView 进行拖放交互:

class CollectionViewController: UICollectionViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        /* ... */

        collectionView?.dragInteractionEnabled = true
    }

}

#3。允许在 iPhone 上对UIImageView 进行拖放交互

UIDragInteraction 有一个名为isEnabled 的属性。 isEnabled 有以下declaration

var isEnabled: Bool { get set }

一个布尔值,指定拖动交互是否响应触摸并允许参与拖动活动。

以下代码显示了如何使用isEnabled,以便在iPhone 上允许UIImageView 的拖放交互和拖放交互:

class ViewController: UIViewController, UIDragInteractionDelegate, UIDropInteractionDelegate {

    let imageView = UIImageView()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(imageView)
        imageView.image = UIImage(named: "MyImage")
        imageView.isUserInteractionEnabled = true
        imageView.contentMode = .scaleAspectFit
        imageView.frame = view.bounds
        imageView.autoresizingMask = [.flexibleWidth, .flexibleHeight]

        let dropInteraction = UIDropInteraction(delegate: self)
        imageView.addInteraction(dropInteraction)

        let dragInteraction = UIDragInteraction(delegate: self)
        dragInteraction.isEnabled = true
        imageView.addInteraction(dragInteraction)
    }

    /* ... */

}

【讨论】:

    猜你喜欢
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2021-11-24
    • 1970-01-01
    • 2023-04-09
    • 2023-03-17
    • 1970-01-01
    • 2021-09-21
    相关资源
    最近更新 更多