我的问题是以编程方式设置 UITextView 的 selectedRange 会选择文本,但不会直观地表明它已被选中。这听起来像 OS 3.0/3.1 中的错误吗?更重要的是,有什么解决方案或建议可以让选择显示?(链接在消息底部的示例项目)
由于我没有收到视觉反馈,我怎么知道它已被选中?两个原因:
- 没有闪烁的光标
- 点击键盘上的任意键会删除选择范围内的现有文本。
我在视图控制器中有一个 UITextView,它允许编辑用户可更改的值。当在表格行上接收到双击时打开编辑器控制器,或者用户在行上点击详细信息披露按钮。viewcontroller 通过 presentModalViewController 到达,在编辑器 VC 的 viewWillAppear 方法中,我用[self.textView becomeFirstResponder];
有时我想用选定的文本视图的全部内容启动编辑器,这样用户就可以简单地开始输入,它会删除现有的内容(这是因为我创建了具有默认标题的新项目,所以几乎可以肯定用户会首先删除编辑器文本字段的全部内容,然后键入其标题)。
我已经尝试过的一些事情:
- 在 viewDidAppear 中设置选定的范围(而不是在 textViewDidBeginEditing 中设置)。
- 用其中的文本副本替换 _textView.text 然后应用 selectedRange (在 textViewDidBeginEditing 中)......也许我正在处理框架错误,这可能会解决它。
[[_textView webView] selectAll];
(私有 API)。同样的行为,选择文本时没有视觉反馈。- 发送 _textView setNeedsDisplay 和 setNeedsLayout。
- 使用 performSelector ... afterDelay 设置 selectedRange 以便在退出 textViewDidBeginEditing 后发生。
// UITextFieldDelegate Methods...
- (void)textViewDidBeginEditing:(UITextView *)_textView
{
NSInteger len = [_textView.text length];
if( self.selectInitialText ){
//NOTE: this is not working as expected. Indeed the text is
// selected but the highlighting of the text isn't showing.
_textView.selectedRange = NSMakeRange(0,len);
}
}
-- 编辑 --
这是提交给 Apple BugReporter 的示例项目。下载 BugReport_7380723 示例项目
附加信息:
在创建和使用示例项目提交时,我发现了两件事:
When there's text selected but no highlight displayed, tap some keystrokes then "shake to undo" and the original text is restored but IS highlighted.
如果您在文本视图中手动进行选择,然后点击“全选”按钮[参考上面链接的示例项目],所有文本都被选中并正确显示突出显示。