我的问题是以编程方式设置 UITextView 的 selectedRangeselects文字,但是does not直观地表明它已被选中。这听起来像是 OS 3.0/3.1 中的错误吗?更重要的是,有什么解决方案或建议可以显示选择? (示例项目链接在消息底部)
由于我没有收到视觉反馈,我如何知道它已被选中?两个原因:
- 光标不闪烁
- 点击键盘上的任意键都会删除选择范围中的现有文本。
我在视图控制器中有一个 UITextView,它允许编辑用户可更改的值。当在表行上收到双击或用户点击行上的详细信息公开按钮时,编辑器控制器将打开。视图控制器通过presentModalViewController到达,在编辑器VC的viewWillAppear方法中,我用以下命令启动键盘[self.textView becomeFirstResponder];
有时我想启动编辑器并选择文本视图的全部内容,以便用户可以简单地开始输入,它将删除现有内容(这是因为我创建了具有默认标题的新项目,所以几乎可以肯定用户会首先删除编辑器文本字段的全部内容,然后输入其标题)。
我已经尝试过的一些事情:
- 在 viewDidAppear 中设置所选范围(而不是在 textViewDidBeginEditing 中进行设置)。
- 将 _textView.text 替换为其中文本的副本,然后应用 selectedRange (在 textViewDidBeginEditing 中)...想也许如果我正在处理框架错误,这可能会解决它。
-
[[_textView webView] selectAll];
(私有API)。同样的行为,文本被选择而没有视觉反馈。
- 发送 _textView setNeedsDisplay 和 setNeedsLayout。
- 使用 PerformSelector ... afterDelay 设置 selectedRange,以便在退出 textViewDidBeginEditing 后发生。
参考S.O.: Here and here
// 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示例项目
附加信息:
在创建和使用示例项目提交时,我发现了两件事:
在以编程方式在 textView 上设置选择之前,只需调用 select 即可使其以可视方式显示新选择。例如:
[textView select:self];
textView.selectedRange = newSelectedRange;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)