在iPhone上刷新UITextView的滚动位置

时间:2009-08-27 21:43:19

标签: iphone refresh scroll uitextview

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

7 个答案:

答案 0 :(得分:27)

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

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

答案 1 :(得分:8)

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

myTextView.text = @"";
myTextView.text = theRealTextContent;

答案 2 :(得分:6)

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

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

唯一的问题是这会让人动起来。如果您希望它捕捉到顶部,请使用:

[theTextView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:NO];

答案 3 :(得分:5)

[textview setScrollEnabled:YES];
textview.text = yourText;
[textview setScrollEnabled:NO];

答案 4 :(得分:1)

这些方法中的任何一种都不能令我满意地使用。

  • scrollRangeToVisible会产生大量的视觉瑕疵(在大字符串之间切换时会有很多滚动),实际上只有在内容更改后的某个时间(我用了0.1秒)延迟调用时才能工作,而不是正如Shaggy Frog的回答所暗示的那样。

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

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

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

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

答案 5 :(得分:1)

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

我在textViewDidBeginEditing中重新启用滚动。

- (void) textViewDidEndEditing: textView;
{
   [textView setScrollEnabled: NO];
   NSString* savedText = [textView text];
   [textView setText:@""];
   [textView setText: savedText];
}

答案 6 :(得分: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
}