13

我的问题是以编程方式设置 UITextView 的 selectedRange 会选择文本,但不会直观地表明它已被选中。这听起来像 OS 3.0/3.1 中的错误吗?更重要的是,有什么解决方案或建议可以让选择显示?(链接在消息底部的示例项目)

由于我没有收到视觉反馈,我怎么知道它已被选中?两个原因:

  1. 没有闪烁的光标
  2. 点击键盘上的任意键会删除选择范围内的现有文本。

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

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

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

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

-- 编辑 --
这是提交给 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.

  • 如果您在文本视图中手动进行选择,然后点击“全选”按钮[参考上面链接的示例项目],所有文本都被选中正确显示突出显示。

4

4 回答 4

17

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

[textView select:self];
textView.selectedRange = newSelectedRange; 
于 2010-07-12T10:17:13.393 回答
4

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

于 2009-11-15T17:49:23.263 回答
1

突然遇到这个问题。在我检查 NSObject 的声明头之前,我遇到了同样的问题。他们已经提供了一个名为 selectAll 的函数:

@interface NSObject(UIResponderStandardEditActions)   // these methods are not implemented in NSObject

- (void)cut:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)copy:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)paste:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)select:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)selectAll:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)delete:(id)sender __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2);

@end
于 2010-09-02T16:51:53.617 回答
0

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

于 2009-11-10T18:11:18.350 回答