如何在iOS 11中禁用UITextView的拖动功能

10

我在UITableview中使用带有拷贝和链接检测的UITextview进行选择操作。在未实现UITextview的拖放功能的情况下,拖放功能仍然能够正常工作。因此,我想禁用UITextView的拖放功能...


这个问题可以帮助找到解决方案。 - Tamás Sengel
5个回答

36

如需禁用文本拖动(即文本“弹出”并可以在屏幕上拖动),请尝试以下方法:

if #available(iOS 11.0, *) { 
    textView.textDragInteraction?.isEnabled = false 
}

7
当有人在文本框中拖放时,我们该如何禁用它?textDropInteraction无法工作... - Amber K

3

我曾经遇到过类似的问题,并找到了适合我的解决方案。

所以,我有一个TableView,每个单元格里面只有一个TextView。我想为TableView启用拖放功能,以便能够移动单元格。但是当我长按一个单元格时,我实际上是按下了它的TextView,也开始了它的拖放会话。每当我试图将该单元格移动到TableView中的新位置时,应用程序都会尝试将该单元格的TextView中的文本插入到新单元格的TextView中,执行“拖放文本复制操作”。

为了禁用这种交互,您可以尝试以下方法:

  1. 为您的UITableViewCell对象创建一个扩展(在YourTableViewCell.swift文件中,链接到YourTableViewCell.xib):
extension YourTableViewCell: UITextDropDelegate {
  func textDroppableView(_ textDroppableView: UIView & UITextDroppable, proposalForDrop drop: UITextDropRequest) -> UITextDropProposal {
    return UITextDropProposal(operation: .cancel)
  }
}
  1. YourTableViewCell作为TextView的拖放代理 (同样在YourTableViewCell.swift中)
override func awakeFromNib() {
  super.awakeFromNib()
  YourTextView.textDropDelegate = self
}

这里的 YourTextView 是你单元格文本视图的出口

这将有助于您的应用程序停止尝试在 TableView 中的 UITextView 中插入文本。
希望对某些人有所帮助。


0

对于那些想要禁用拖放交互的人,请查看以下代码:


print(noteView.interactions) // you will find a drop interaction here
textView.interactions.removeAll(where: { $0 is UIDropInteraction })
print(noteView.interactions) // it's gone


同样地,拖放交互和拖动交互都可以被禁用/移除。
textView.interactions.removeAll(where: { $0 is UIDropInteraction
                                      || $0 is UIDragInteraction })



-1

嗨,我尝试了一个更简单的解决方案,似乎可以工作:

if #available(iOS 11.0, *) {      
    myTextView.textDropDelegate=nil
}

现在,当我将图像拖放到此区域时,我可以将其处理为图像而不是路径文本。


-1
禁用UITextview和UITextfield的拖放功能:
textView.removeInteraction(textView.textDropInteraction!)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接