以编程方式设置时,UITextView selectedRange不显示

wkw*_*wkw 13 iphone cocoa-touch uitextview iphone-sdk-3.1

我的问题是以编程方式设置UITextView的selectedRange 选择文本,但不能直观地指示它被选中.这听起来像OS 3.0/3.1中的错误.更重要的是,任何解决方案或建议选择显示?(消息底部链接的示例项目)

我怎么知道它被选中,因为我没有得到视觉反馈?两个原因:

  1. 没有闪烁的光标
  2. 点击键盘上的任何键可删除选择范围中的现有文本.

我在viewcontroller中有一个UITextView,它允许编辑用户可更改的值.当在表格行上接收到双击时,或者用户点击一行上的详细信息公开按钮时,将打开编辑器控制器.viewcontroller通过presentModalViewController到达,并在编辑器的VC的viewWillAppear方法中启动键盘[self.textView becomeFirstResponder];

有时我想启动编辑器,选择textview的全部内容,这样用户就可以简单地开始输入,它会删除现有的内容(这是因为我创建了带有默认标题的新项目,因此几乎可以肯定用户将首先删除编辑器文本字段的全部内容,然后键入其标题).

我已经尝试过的一些事情:

  1. 在viewDidAppear中设置所选范围(而不是在textViewDidBeginEditing中执行此操作).
  2. 将_textView.text替换为其中的文本副本,然后应用selectedRange(在textViewDidBeginEditing中)......想一想,如果我正在处理框架错误,这可能会解决它.
  3. [[_textView webView] selectAll];(私人api).相同的行为,文本被选中,没有视觉反馈.
  4. 发送_textView setNeedsDisplay和setNeedsLayout.
  5. 使用performSelector ... afterDelay设置selectedRange,以便在退出textViewDidBeginEditing后发生.

参考SO: 这里这里

// 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);
 }
}
Run Code Online (Sandbox Code Playgroud)

- 编辑 -
这是提交给Apple BugReporter的示例项目.下载BugReport_7380723示例项目

附加信息:

在创建和播放示例项目提交时,我发现了两件事:

  • 当选择了文本但没有显示突出显示时,点击一些按键然后"摇动撤消"并恢复原始文本但是IS突出显示.

  • 如果手动进行选择在TextView中,然后点击"全选"按钮[指上面链接示例项目],所有的文本选择正确显示的亮点.

Zac*_*Zac 17

在以编程方式在textView上设置选择之前,只需调用select以使其以可视方式显示新选择.例如:

[textView select:self];
textView.selectedRange = newSelectedRange; 
Run Code Online (Sandbox Code Playgroud)


wkw*_*wkw 5

我现在将回答我自己的问题,并在有更多信息时更新它(或者如果其他人找到合适的解决方法,我会很乐意将检查移至他们的答案)。我向苹果提交了一份错误报告,在提交示例代码后,它就处于开放状态。我非常确信这是一个错误,所以当我收到他们的回复时,我会在这里传递。


And*_*iih 0

解决方法:您似乎想要的是 UITextView 占位符功能。这当然不存在。但是,这里有一些解决方法