【问题标题】:Enable selecting text without user interaction enabled启用在未启用用户交互的情况下选择文本
【发布时间】:2017-08-31 12:39:13
【问题描述】:

我有一个包含电话号码的文本字段。它不应该被编辑,但用户应该能够通过长按手机来选择它。当他长按文本应该被选中,而不仅仅是复制到剪贴板。到目前为止,我只让它与isUserInteractionEnabled == true 一起工作,但我仍然需要让它为假。关于我如何做到这一点的任何建议?我现在的代码:

func longPress(_ longPressGestureRecognizer: UILongPressGestureRecognizer) {
    self.cell?.textField.isUserInteractionEnabled = true
    self.cell?.textField.becomeFirstResponder()
    self.cell?.textField.selectedTextRange = self.cell?.textField.textRange(from: (self.cell?.textField.beginningOfDocument)!, to: (self.cell?.textField.endOfDocument)!)
    //self.cell?.textField.isUserInteractionEnabled = false
}

【问题讨论】:

  • 为什么要将isUserInteractionEnabled设置为false?只是为了禁用编辑吗?因为有一个不同的属性。
  • 设置文本文件编辑属性 false 和 UserInteractionEnabled = true
  • 我希望你们两个也能提到房产是什么。唯一听起来像你提到的东西是isEditing,这是别的东西,只能得到。
  • @ЧингизМарданов 我刚刚意识到您使用的是UITextField。如果您想禁用编辑,请不要使用它。有关详细信息,请参阅我的答案。

标签: swift uitextfield user-interaction


【解决方案1】:

出于您的目的,UITextField 不是一个合适的选择。正如documentation 所述,UITextField 是(强调由我添加):

在您的界面中显示可编辑文本区域的对象。

因此,您不能将UITextField 设置为不可编辑。如果您想在 UI 上显示不可编辑的文本,请使用 UILabelUITextView

您可以将UITextViewisEditable 属性设置为false,只要isSelectable 设置为true,它仍然可以选择。

UILabel 显示只读文本,因此您甚至无需在使用时禁用编辑功能。

【讨论】:

  • 我想更改为UITextView 是我唯一的选择。谢谢。
  • @NikolaiRuhe 将 isEnabled 设置为 false 也会禁用触摸,因此这不是仅禁用编辑的可行解决方案。请参阅文档:“将此属性的值设置为 true 以启用控件或设置为 false 以禁用它。启用的控件能够响应用户交互,而禁用的控件忽略触摸事件并可能以不同的方式绘制自身。 "
猜你喜欢
  • 1970-01-01
  • 2022-09-29
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-03
相关资源
最近更新 更多