从一开始,我的UITextView
可编辑属性为true是不可编辑的(通过NIB中的设置)。行为使得用户可以选择和复制文本但不能编辑。事情就是这样。
但是,如果我拨打setSelectedRange
,副作用是editable属性设置为YES。
将其设置为NO [textview setEditable:NO]
滚动到textView的底部并取消我的程序选择。它也不起作用,因为无论如何编辑都会启用。键盘出现和一切。
我需要能够以编程方式选择某些内容并将textView保持在用户只能复制和选择文本的状态。
[textView select:self];
[textView setSelectedRange:selectedText];
我被困住了。寻找您可以给予的任何建议。
这不起作用:
[textView select:self];
[textView setSelectedRange:selectedText];
[textView setEditable:NO];
我还尝试设置委托函数textViewShouldBeginEditing
以返回NO:
- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {
return NO;
}
这只会锁定所有内容,我无法选择任何文字。
答案 0 :(得分:1)
我意识到这已经得到了回答,但这是我为保留弹出菜单所做的改进,只是禁用某些选项;
-(BOOL) canPerformAction:(SEL)action withSender:(id)sender {
bool response = [super canPerformAction:action withSender:sender];
if(response && (action == @selector(cut:) || action == @selector(paste:) || action == @selector(delete:) || action == @selector(_promptForReplace:))) {
return NO;
}
return response;
}
根据定义的操作调用canPerformAction。调用父方法将处理大多数这些情况,但我还决定禁用剪切,粘贴,删除和拼写建议(_promptForReplace)。
答案 1 :(得分:0)
在类似的情况下,这似乎对我有用:
[textView setDelegate:self];
[textView select:self];
[textView setSelectedRange:range];
(BOOL)textView:shouldChangeTextInRange:replacementText:
,返回NO
textView.inputView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
答案 2 :(得分:0)
textView应该是可编辑的:
[textView setEditable:YES];
做出选择:
[textView select:self];
[textView setSelectedRange:range];
在代表中有这些:
要禁用菜单(不适合我,但没关系):
-(BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
[UIMenuController sharedMenuController].menuVisible = NO;
return NO;
}
要禁用键盘:
textView.inputView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
禁用编辑:
- (BOOL)textView:(UITextView*)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString*)text {
return NO;
}