UITextView setSelectedRange更改可编辑属性

时间:2011-03-21 21:39:38

标签: ios objective-c uitextview

从一开始,我的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;
}

这只会锁定所有内容,我无法选择任何文字。

3 个答案:

答案 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可编辑
  • [textView setDelegate:self];
  • [textView select:self];
  • [textView setSelectedRange:range];
  • 添加一个函数(BOOL)textView:shouldChangeTextInRange:replacementText:,返回NO
  • 以及最后一招:使用以下方法将空视图指定为textview的键盘:

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;
}