以编程方式滚动UITextView

时间:2009-07-23 14:50:49

标签: iphone iphone-sdk-3.0 scroll uitextview

我正在我的应用中实现一些简单的文本聊天功能,我遇到了以编程方式滚动UITextView的问题。我正在使用在Interface Builder中创建的UITextView,它将新行和一些文本附加到预先存在的文本中。添加新文本时,它应滚动到底部。

我构建了一个测试应用程序来确定概念,然后再将其添加到我的应用程序中。 UITextView中的文字会更新UITextField中的文字,但不会发生滚动。

- (IBAction)enteredText {

CGPoint currentPosition = [textWindow contentOffset];
[textWindow setText:[NSString stringWithFormat:@"%@\n%@", textWindow.text, textInput.text]];
[textWindow setContentOffset:currentPosition animated:NO];
[textWindow scrollRangeToVisible:NSMakeRange([textWindow.text length], 0)];
[textInput setText:@""];
[textInput becomeFirstResponder];

}

我记得在我之前开发的另一个应用程序中实现了一个非常相似的功能,而且我记得代码是类似的。唯一的区别是早期的应用程序适用于iPhone OS 2,但这个适用于3.0。我在一些论坛中读到,在Interface Builder中创建UITextView时,3.0测试版存在滚动问题。我检查了current release notes,但没有看到任何迹象。

编辑:调用IB操作,因为文本在UITextView中更新。并选中“可取消内容触摸”。

修改:确认相同的代码适用于2.2.1但不适用于3.0

2 个答案:

答案 0 :(得分:3)

我发现在用户点击UITextView后滚动开始工作。所以在我加载这个特定视图后,我暂时将UITextView设置为FirstResponder,然后将UITextField设置为FirstResponder:

[myChatRoomViewController.chatWindow becomeFirstResponder];
[myChatRoomViewController.input becomeFirstResponder];

滚动然后自动发生,虽然它看起来不如我在iPhone OS 2中记得的那么平滑。

答案 1 :(得分:0)

你确定IBAction被调用了吗?如果是这样,请尝试确保在Interface Builder中选中“可取消内容触摸”。这应该可以解决您在帖子中提到的问题。