在对UITextView进行子类化时实现UIScrollView方法

时间:2014-05-02 06:54:26

标签: ios objective-c cocoa-touch uiscrollview uitextview

我在控制我正在使用的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 scrollRangeToVisible方法都没有(我尝试将该方法添加到子类实现中)。我无法弄清楚为什么隐含的滚动回到顶部正在发生,我想阻止它......

1 个答案:

答案 0 :(得分:0)

如果您如图所示覆盖这些UIScrollView方法,则任何来电者(无论是您的代码还是系统)都会触及您的实施,而不是内置UIScrollView。如果您想利用系统实现,您可以随时调用super。

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