子类化 UITextView 时实现 UIScrollView 方法
Posted
技术标签:
【中文标题】子类化 UITextView 时实现 UIScrollView 方法【英文标题】:Implementing UIScrollView Methods when Subclassing UITextView 【发布时间】:2014-05-02 06:54:26 【问题描述】:我在控制正在使用的 UITextView
中的滚动时遇到问题,因此我选择创建自己的子类。
关于为某些UIScrollView
超类方法提供实现,我有一个非常基本的问题。
这是我的 UITextView
子类的框架代码:
@interface PastedTextView : UITextView
@end
@implementation PastedTextView
- (id)initWithFrame:(CGRect)frame
self = [super initWithFrame:frame];
if (self)
return self;
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
NSLog(@"scrollRectToVisible");
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
NSLog(@"setContentOffset");
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated
NSLog(@"zoomToRect");
@end
什么时候会调用那些UIScrollView
方法?仅来自我自己的客户端代码?还是会被框架调用?
更新:
我之所以问这个问题是因为我遇到了以下问题:我正在以编程方式将文本添加到 UITextView
(来自粘贴板)。当我这样做时,如果 textview 滚动使得内容的顶部不再可见,则在附加新文本后文本视图会滚动回顶部。
我没有明确触发这个滚动,所以它发生在框架内。
我在 Apple 的文档中没有找到任何描述此行为的内容。所以,我一直在试图找到滚动的来源,这样我就可以避免它......
当这个滚动发生时,上面的方法都不会被调用。顺便说一句,UITextView
s scrollRangeToVisible
方法也不是(我尝试将该方法添加到子类实现中)。我不知道为什么会发生隐式滚动回顶部,我想阻止它......
【问题讨论】:
【参考方案1】:如果您覆盖这些UIScrollView
方法,如图所示,任何调用者(无论是您的代码还是系统的)都将访问您的实现,而不是内置的UIScrollView
。如果你想利用系统实现,你可以随时调用 super。
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated
[super zoomToRect:rect animated:animated];
NSLog(@"zoomToRect");
【讨论】:
所以我遇到的问题是:我正在以编程方式将文本添加到UITextView
(来自粘贴板)。当我这样做时,如果 textview 滚动使得内容的顶部不再可见,则文本视图在附加新文本后会滚动回顶部。发生这种情况时,不会调用上述任何方法。顺便说一句,UITextView
s scrollRangeToVisible
方法也不是(如果我将它添加到子类实现中)。我无法弄清楚为什么会发生隐式滚动回顶部...以上是关于子类化 UITextView 时实现 UIScrollView 方法的主要内容,如果未能解决你的问题,请参考以下文章
ios - 带有 UITextView 的 UITapGestureRecognizer