我在控制我正在使用的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
方法都没有(我尝试将该方法添加到子类实现中)。我无法弄清楚为什么隐含的滚动回到顶部正在发生,我想阻止它......
答案 0 :(得分:0)
如果您如图所示覆盖这些UIScrollView
方法,则任何来电者(无论是您的代码还是系统)都会触及您的实施,而不是内置UIScrollView
。如果您想利用系统实现,您可以随时调用super。
- (void)zoomToRect:(CGRect)rect animated:(BOOL)animated
{
[super zoomToRect:rect animated:animated];
NSLog(@"zoomToRect");
}