我有一个文本字段,其中包含电话号码。它不应该被编辑,但用户应该能够通过长按手机来选择它。当他长按时,文本应该被选择,而不仅仅是复制到剪贴板。到目前为止,我只能让它与
isUserInteractionEnabled == true
一起使用,但我仍然需要将其设置为 false。关于我如何做到这一点有什么建议吗?我现在的代码:
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
}
就您的目的而言,
UITextField
不是合适的选择。正如文档所述,UITextField
是(重点是我添加的):
在界面中显示可编辑文本区域的对象。
因此,您不能将
UITextField
设置为不可编辑。如果您想在 UI 上显示不可编辑的文本,请使用 UILabel
或 UITextView
。
您可以将
UITextView
的 isEditable
属性设置为 false,只要 isSelectable
设置为 true,它仍然是可选的。
A
UILabel
显示只读文本,因此您在使用它时甚至不需要考虑禁用编辑。
这可能不是最干净的解决方案,但您可以使用
textViewDidBeginEditing
委托函数,并在不允许编辑的情况下立即调用 textView.resignFirstResponder()
。然后,文本视图的行为就像禁用用户交互的文本字段。
func textViewDidBeginEditing(_ textView: UITextView) {
if isReadOnly {
textView.resignFirstResponder()
return
}
}