如何在 iOS 11 中禁用 UITextView 中的拖动
Posted
技术标签:
【中文标题】如何在 iOS 11 中禁用 UITextView 中的拖动【英文标题】:How to disable Dragging in UITextView in iOS 11 【发布时间】:2018-05-14 12:52:09 【问题描述】:我在 UITableview 中使用 UITextview 并通过复制和链接检测进行选择。拖放工作无需在 UITextview 上实现拖放功能。所以我想禁用 UITextView 拖放...
【问题讨论】:
This question 可以帮助找到解决方案。 【参考方案1】:要禁用文本拖动(文本“弹出”并且可以在屏幕上拖动),请尝试以下操作:
if #available(ios 11.0, *)
textView.textDragInteraction?.isEnabled = false
【讨论】:
当有人掉入文本字段时我们如何禁用? textDropInteraction 不起作用...【参考方案2】:我遇到了类似的问题,并找到了适合我的解决方案。
所以,我在每个单元格内都有一个 TableView
和一个 TextView
。我想为TableView
启用拖放功能,以便能够移动单元格。但是当我长按一个单元格时,我实际上是按了它的TextView
,也开始了它的拖动会话。每当我试图将该单元格移动到TableView
中的新位置时,该应用程序就会尝试将该单元格的TextView
中的文本插入到新单元格的TextView
中,执行“拖放文本复制操作”。
要禁用此类交互,您可以尝试以下操作:
-
为您的 UITableViewCell 对象创建一个扩展名(在 YourTableViewCell.swift 文件中,链接到 YourTableViewCell.xib):
extension YourTableViewCell: UITextDropDelegate
func textDroppableView(_ textDroppableView: UIView & UITextDroppable, proposalForDrop drop: UITextDropRequest) -> UITextDropProposal
return UITextDropProposal(operation: .cancel)
-
使
YourTableViewCell
成为TextView
的放置委托(也在YourTableViewCell.swift 中)
override func awakeFromNib()
super.awakeFromNib()
YourTextView.textDropDelegate = self
YourTextView
是单元格文本视图的出口
这将帮助您的应用停止尝试在您的 UITextView
中插入文本 TableView
。
希望它可以帮助某人。
【讨论】:
【参考方案3】:禁用 UITextview 和 UITextfield drop:
textView.removeInteraction(textView.textDropInteraction!)
【讨论】:
【参考方案4】:对于那些想要禁用放置交互的人,请查看以下几行,
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 )
【讨论】:
【参考方案5】:嘿,我尝试了一个更简单的解决方案,似乎可行:
if #available(iOS 11.0, *)
myTextView.textDropDelegate=nil
所以现在,当我在这个区域放置一个图像时,我可以将它作为一个图像处理,而不是作为路径的文本。
【讨论】:
以上是关于如何在 iOS 11 中禁用 UITextView 中的拖动的主要内容,如果未能解决你的问题,请参考以下文章
iOS 5 - 有没有办法在 UITextView 中禁用自动填充但保留拼写检查(红色下划线)?
在 UITextView 上以编程方式禁用 iOS8 Quicktype 键盘
添加文本和禁用滚动时如何使 UITextView 字段扩展?