10

我想对 UITextView 进行某种类型的刷新,以将 textview 设置回其原始状态。我有一个段落会根据用户单击的 TableViewCell 动态填充。因此,当他们滚动文本字段,然后返回并选择另一个单元格并返回时,文本会更改,但滚动位置会在用户离开时保持不变。如何将其恢复为默认状态。谢谢!

4

7 回答 7

27

默认状态下,你的意思是滚动到顶部吗?如果是这样,你就在正确的轨道上。尝试

[myTextView scrollRangeToVisible:NSMakeRange(0, 0)];
于 2009-08-27T22:49:01.143 回答
8

我发现如果我先清除 UITextView 然后应用新文本,它会自动“滚动”回顶部。

myTextView.text = @"";
myTextView.text = theRealTextContent;
于 2010-02-05T13:30:38.450 回答
6

如果您希望它向上滚动到顶部,则此方法有效:

[theTextView scrollRangeToVisible:NSMakeRange(0, 0)];

唯一的问题是,这会使它向上移动。如果您希望它捕捉到顶部,请使用以下命令:

[theTextView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];
于 2011-05-26T02:03:51.057 回答
5
[textview setScrollEnabled:YES];
textview.text = yourText;
[textview setScrollEnabled:NO];
于 2010-08-20T02:59:44.623 回答
1

这些方法中的任何一种都没有让我满意。

  • scrollRangeToVisible 会产生大量的视觉伪影(在大字符串之间切换时会出现大量滚动),事实上,在内容更改后的一段时间(我使用了 0.1 秒)的延迟调用中,它根本不工作,而不是像 Shaggy Frog 的回答所暗示的那样直接.

  • 在设置新内容之前将文本设置为 @"" 没有帮助,即使有延迟。

似乎一旦输入了 UITextView,它就永远处于这种设置新内容会导致烦人的滚动伪影的模式下。我也尝试将 selectionRange 设置为 UITextView 的开头,但这没有帮助。在设置新内容之前发送 resignFirstResponder 消息也没有帮助。

因此,我决定在每次更改内容时删除并重新创建 UITextView。在我的应用程序中,这是一个非常罕见的事件(基于人类交互),它不是性能问题。这是我能找到的将新内容“加载”到 UITextView 中而没有大量烦人的滚动伪影的唯一方法。

我的经验是使用 OS3.2(ipad 模拟器)

于 2010-06-21T13:52:35.153 回答
1

我设法得到了想要的结果——在编辑结束时强制 UITextView '滚动'到其内容的顶部。但要实现它,我必须在 textViewDidEndEditing 中禁用滚动,并且还必须以相同的方法重置文本。

我在 textViewDidBeginEditing 中重新启用滚动。

- (void) textViewDidEndEditing: textView;
{
   [textView setScrollEnabled: NO];
   NSString* savedText = [textView text];
   [textView setText:@""];
   [textView setText: savedText];
}
于 2010-12-31T11:16:04.827 回答
0

最终对我有用的是什么来清除文本内容,然后在下一个运行循环中将其设置为所需的文本。

// clear the text view
self.textView.text = ""

// set the text on the next run loop
dispatch_async(dispatch_get_main_queue()) {
    self.textView.text = someText
}
于 2015-12-29T09:42:32.883 回答