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中有多行文本
UITextView
的selectable
属性:
此属性控制用户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; }
这应该工作正常,