【问题标题】:How to entirely disable UITextView's scroll?如何完全禁用 UITextView 的滚动?
【发布时间】:2011-06-06 19:58:32
【问题描述】:

我正在使用 UITextView 为 iPad 开发一个简单的文本编辑应用程序。 UIScrollView 和 UITextView 总是有一些问题。我想我对这两个人的期望太高了。

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

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

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

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

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

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

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

但什么也没发生。

2) 几秒钟后,我使用 NSTimer 调用了上述代码,并正确滚动返回到原始位置(偏移量)。但是,先滚动到最后,然后再滚动到顶部..

有没有办法完全阻止 UITextView 的滚动?

【问题讨论】:

    标签: iphone ipad ios uiscrollview uitextview


    【解决方案1】:

    您可以通过将以下方法放入 UITextView 子类来禁用几乎所有滚动:

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

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

    如果您只想禁用某些滚动,则创建一个 ivar,我们将其命名为 acceptScrolls,以确定您是否要允许滚动。然后你的 scrollRectToVisible 方法可以如下所示:

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

    【讨论】:

    • 非常感谢!我从 stackoverflow 得到了很多帮助。希望以后能尽快回答很多问题!
    猜你喜欢
    • 2015-04-22
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多