UITextView禁用文本选择

diz*_*izy 39 iphone objective-c uitextview ios

我很难UITextView禁止选择文本.

我试过了:

canCancelContentTouches = YES;
Run Code Online (Sandbox Code Playgroud)

我尝试过子类化和覆盖:

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender   
Run Code Online (Sandbox Code Playgroud)

(但只有在选择后才会调用)

- (BOOL)touchesShouldCancelInContentView:(UIView *)view;  
Run Code Online (Sandbox Code Playgroud)

(我没有看到被解雇)

- (BOOL)touchesShouldBegin:(NSSet *)touches
                 withEvent:(UIEvent *)event
             inContentView:(UIView *)view; 
Run Code Online (Sandbox Code Playgroud)

(我也没有看到被解雇)

我错过了什么?

Daf*_*ams 76

问题如何在UITextView中禁用"复制","剪切","选择","全选",以及我刚刚实施和验证的可行解决方案:

子类UITextView和覆盖canBecomeFirstResponder:

- (BOOL)canBecomeFirstResponder {
    return NO;
}
Run Code Online (Sandbox Code Playgroud)

请注意,这会禁用链接和其他可插入文本内容.

  • 您是否尝试过使用可选择的属性?@property(nonatomic,getter = isSelectable)BOOL可选NS_AVAILABLE_IOS(7_0); //切换可选性,它控制用户选择内容并与URL和附件交互的能力 (10认同)
  • 任何人都知道一个解决方案不会禁用链接,但会禁用突出显示?我尝试覆盖长按,但这似乎也禁用链接窃听...... (7认同)
  • @TrespassersW overwrite - (void)textViewDidChangeSelection:(UITextView*)textView并设置textView.selectedRange = NSMakeRange(0,0); 可以做到这一点 (4认同)
  • 这会禁用链接等. (3认同)

小智 46

我发现了这个电话

[textView setUserInteractionEnabled:NO];
Run Code Online (Sandbox Code Playgroud)

效果很好.

  • 这也将禁用UITextView上的滚动功能 (30认同)
  • 并禁用单击链接的功能 (11认同)
  • 我使用uitextview作为自定义uitableviewcell中的子视图.它就像一场梦 (2认同)

Hea*_*ers 15

UITextViewselectable财产:

此属性控制用户选择内容并与URL和文本附件交互的能力.默认值为YES.


aar*_*rse 10

斯威夫特 4,Xcode 10:

如果您想让它使用户无法选择或编辑文本。

这使它无法编辑:

textView.isEditable = false
Run Code Online (Sandbox Code Playgroud)

这将禁用所有用户交互:

textView.isUserInteractionEnabled = false
Run Code Online (Sandbox Code Playgroud)

这使得您无法选择它。这意味着它不会显示编辑或粘贴选项。我想这就是你要找的。

textView.isSelectable = false
Run Code Online (Sandbox Code Playgroud)


slf*_*slf 9

听起来你真正想要的是UIScrollView中的巨型UILabel,而不是UITextView.

更新:如果您使用的是较新版本的iOS,UILabel现在有一个line属性:

UILabel中的多行文本

  • @AlbertRenshaw不要让它更高 - 将其设置为0,然后你可以拥有任意数量的线条. (2认同)

Ted*_*Ted 7

斯威夫特 4 , Xcode 10

该解决方案将

  • 禁用突出显示
  • 启用点击链接
  • 允许滚动

确保将委托设置为 YourViewController

yourTextView.delegate = yourViewControllerInstance
Run Code Online (Sandbox Code Playgroud)

然后

extension YourViewController: UITextViewDelegate {

    func textViewDidChangeSelection(_ textView: UITextView) {
        view.endEditing(true)
    }

}
Run Code Online (Sandbox Code Playgroud)

  • 它在 iOS 13 中对我不起作用。使用“textView.selectedTextRange = nil”代替“view.endEditing(true)” (4认同)

Tec*_*Zen 5

如果您只是想阻止它被编辑,那么将UITextView的"可编辑"属性设置为NO/False.

如果你试图让它可编辑但不可选择,那将会很棘手.您可能需要创建一个用户可以键入的隐藏文本视图,然后让UITextView观察隐藏的textview并使用textview的文本填充自己.