如何让 iOS 11 拖放在 iPhone 上运行
Posted
技术标签:
【中文标题】如何让 iOS 11 拖放在 iPhone 上运行【英文标题】:How to get iOS 11 drag and drop working on the iPhone 【发布时间】:2018-03-05 15:57:19 【问题描述】:我一直在尝试新的 ios 11 拖放功能。这很棒,但它只能在 iPad 上运行。 Apple声称它也适用于iPhone,但我无法让它在那里工作?苹果的说法是假的,还是我做错了什么?
【问题讨论】:
***.com/questions/45225329/… 的副本? @MartinR 是的,但没有接受任何答案,而且答案没有解释为什么我在让它工作时遇到了很多麻烦。我的回答是。 【参考方案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)
/* ... */
【讨论】:
以上是关于如何让 iOS 11 拖放在 iPhone 上运行的主要内容,如果未能解决你的问题,请参考以下文章
苹果实用技巧-777期:如何能让旧款iPhone运行iOS11系统更流畅?
如何在 iOS 11 的 UITextfield 中启用拖动
iPad升级到iOS11可在屏幕上同时运行4个应用程序,你知道怎么做吗?