在子类化UITextView时实现UIScrollView方法



我在控制我正在使用的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的文档中没有找到任何描述此行为的内容。所以,我一直试图找到滚动的来源,这样我就可以避免它…

当滚动发生时,上述方法都不会被调用。顺便说一句,UITextViewscrollRangeToVisible方法也不是(我已经尝试将该方法添加到子类实现中)。我不知道为什么会隐式滚动到顶部我想阻止它。

如果您重写这些UIScrollView方法,则任何调用者(无论是您的代码还是系统的调用者)都将击中您的实现,而不是内置的UIScrollView。如果你想利用系统实现的优势,你总是可以调用super。

- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated
{
    [super zoomToRect:rect animated:animated];
    NSLog(@"zoomToRect");
}

最新更新