2014-05-02 27 views
0

我在控制在我使用的UITextView内的滚动问题,所以我选择创建自己的子类。UITextView子类化时实现UIScrollView方法

我有一个关于为某些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方法(我已经尝试将该方法添加到子类实现)。我不明白为什么隐式滚动回到顶部正在发生,我想要防止它...

回答

0

如果你覆盖这些UIScrollView方法如图所示,任何调用者(无论是你的代码,或系统的)会击中你的实现而不是内置的UIScrollView之一。如果你想利用系统实现,你总是可以调用super。

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

所以我遇到的问题:我正在编程向UITextView(从粘贴板)添加文本。当我这样做时,如果textview已滚动以使内容的顶部不再显示,则文本视图在追加新文本后滚动回顶部。发生这种情况时,上述方法都不会被调用。顺便提一下,UITextView的'scrollRangeToVisible'方法(如果我将它添加到子类实现中)都不是。我无法弄清楚为什么隐含的滚动回到顶端正在发生...... –