如何entriely禁用UITextView的滚动?

我正在使用UITextView为iPad开发一个简单的文本编辑应用程序。 我总是有一些与UIScrollView和UITextView的问题。 我想我只是期望从这两个东西太多的东西。

当我将myTextView.text设置为另一个NSString实例时,滚动会自动发生。 我可以通过设置来防止这种滚动

myTextView.scrollEnabled = NO; myTextView.text = newText; myTextView.scrollEnabled = YES; 

但是,如果我更改了myTextView的selectedRange属性,发生滚动。

具体来说,如果selectedRange的范围发生在当前屏幕上的文本中,则不会发生滚动。

例如,如果通过点击“全选”属性select所有文本,则不会发生滚动。 但是,如果我通过将selectedRange设置为NSMakeRange(0,[myTextView.text length])来select所有文本,则会发生滚动到END(最后一个插入位置)。

为了解决这个问题,1)我保存了myTextView的原始内容偏移量。

 CGPoint originalOffset = myTextView.contentOffset; // change myTextView.selectedRange here myTextView.selectedRange = originalOffset 

但没有发生。

2)我用NSTimer在几秒钟后调用了上面的代码,并正确地滚动到原来的位置(偏移)。 但是,滚动到第一次发生,然后到顶部..

有没有办法彻底防止UITextView的滚动片刻?

谢谢!

你可以通过把下面的方法放到你的UITextView子类中来禁用几乎所有的滚动。

 - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated { // do nothing } 

我说“几乎”所有滚动的原因是,即使有上述,它仍然接受用户滚动。 尽pipe可以通过将self.scrollEnabled设置为NO来禁用这些function。

如果你只想禁用一些卷轴,那么制作一个伊维尔,让我们称它为接受卷轴,以确定是否要允许滚动。 那么你的scrollRectToVisible方法可以像这样:

 - (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated { if (self.acceptScrolls) [super scrollRectToVisible: rect animated: animated]; }