无需启用用户交互即可选择文本

问题描述 投票:0回答:2

我有一个文本字段,其中包含电话号码。它不应该被编辑,但用户应该能够通过长按手机来选择它。当他长按时,文本应该被选择,而不仅仅是复制到剪贴板。到目前为止,我只能让它与

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
}
swift uitextfield user-interaction
2个回答
0
投票

就您的目的而言,

UITextField
不是合适的选择。正如文档所述,
UITextField
是(重点是我添加的):

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

因此,您不能将

UITextField
设置为不可编辑。如果您想在 UI 上显示不可编辑的文本,请使用
UILabel
UITextView

您可以将

UITextView
isEditable
属性设置为 false,只要
isSelectable
设置为 true,它仍然是可选的。

A

UILabel
显示只读文本,因此您在使用它时甚至不需要考虑禁用编辑。


0
投票

这可能不是最干净的解决方案,但您可以使用

textViewDidBeginEditing
委托函数,并在不允许编辑的情况下立即调用
textView.resignFirstResponder()
。然后,文本视图的行为就像禁用用户交互的文本字段。

func textViewDidBeginEditing(_ textView: UITextView) {
    if isReadOnly {
        textView.resignFirstResponder()
        return
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.