UITextView禁用文本select

可能重复:
如何禁用UITextView中的复制,剪切,select,全选

我很难得到UITextView禁用select文本。

我试过了:

 canCancelContentTouches = YES; 

我试过子类化和覆盖:

 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender 

(但是只有在select之后才被调用)

 - (BOOL)touchesShouldCancelInContentView:(UIView *)view; 

(我没有看到被解雇了)

 - (BOOL)touchesShouldBegin:(NSSet *)touches withEvent:(UIEvent *)event inContentView:(UIView *)view; 

(我也没有看到被解雇)

我错过了什么?

问题如何禁用UITextView中的复制,剪切,select和全选有一个可行的解决scheme,我刚刚实施和validation:

子类UITextView并覆盖canBecomeFirstResponder:

 - (BOOL)canBecomeFirstResponder { return NO; } 

请注意,这将禁用链接和其他可点击的文本内容。

我发现那叫

 [textView setUserInteractionEnabled:NO]; 

工作得很好。

这听起来像你真正想要的是一个UIScrollView内的巨大的UILabel,而不是一个UITextView。

更新:如果你在iOS的新版本UILabel现在有一个线属性:

UILabel中有多行文本

UITextViewselectable属性:

此属性控制用户select内容并与URL和文本附件进行交互的能力。 默认值是YES。

如果你只是想阻止它被编辑,然后将UITextView的“可编辑”属性设置为NO / False。

如果你想让它变得可编辑但不可选,这将是棘手的。 你可能需要创build一个隐藏的textview,用户可以input,然后让UITextView观察隐藏的textview并使用textview的文本填充自己。

你有没有尝试为你的UITextView设置userInteractionEnabled为NO? 但是你也会失去滚动。

如果你需要滚动,这可能是你使用UITextView而不是UILabel的原因,那么你需要做更多的工作。 您可能必须重写canPerformAction:withSender:为您不希望允许的操作返回NO

 - (BOOL)canPerformAction:(SEL)action withSender:(id)sender { switch (action) { case @selector(paste:): case @selector(copy:): case @selector(cut:): case @selector(cut:): case @selector(select:): case @selector(selectAll:): return NO; } return [super canPerformAction:action withSender:sender]; } 

对于更多, UIResponderStandardEditActions 。

要做到这一点首先是UITextView的子类

并在实施中做到以下几点

 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event { self.selectable = NO; } - (void)touchesCancelled:(nullable NSSet<UITouch *> *)touches withEvent:(nullable UIEvent *)event { self.selectable = YES; } 

这应该工作正常,