繁体   English   中英

如何让iOS 11拖放工作在iPhone上

[英]How to get iOS 11 drag and drop working on the iPhone

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

你正在某个视图上安装UIDragInteraction对象,对吗? 嗯,默认情况下,iPhone上的拖拽交互的isEnabled属性为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

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


#1。 允许在iPhone上为UITableView拖放交互

UITableView有一个名为dragInteractionEnabled的属性。 dragInteractionEnabled具有以下声明

var dragInteractionEnabled: Bool { get set }

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

此属性的默认值在iPad上为true ,在iPhone上为false 在iPhone上将值更改为true可以将内容从表格视图拖动到iPhone上的其他应用程序,并从其他应用程序接收内容。

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

class TableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        /* ... */

        tableView.dragInteractionEnabled = true
    }

}

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

UICollectionView有一个名为dragInteractionEnabled的属性。 dragInteractionEnabled具有以下声明

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具有以下声明

var isEnabled: Bool { get set }

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

以下代码显示了如何使用isEnabled以便除了在iPhone上的UIImageView drop交互之外允许拖动交互:

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)
    }

    /* ... */

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM