【问题标题】:Implementing UIScrollView Methods when Subclassing UITextView子类化 UITextView 时实现 UIScrollView 方法
【发布时间】: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 的文档中没有找到任何描述此行为的内容。所以,我一直在试图找到滚动的来源,这样我就可以避免它......

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 所以我遇到的问题是:我正在以编程方式将文本添加到UITextView(来自粘贴板)。当我这样做时,如果 textview 滚动使得内容的顶部不再可见,则文本视图在附加新文本后会滚动回顶部。发生这种情况时,不会调用上述任何方法。顺便说一句,UITextViews scrollRangeToVisible 方法也不是(如果我将它添加到子类实现中)。我无法弄清楚为什么会发生隐式滚动回顶部...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多