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