Objective c UIScrollViewDelegate方法不使用UITextView子类

Objective c UIScrollViewDelegate方法不使用UITextView子类,objective-c,cocoa-touch,uitextview,uiscrollviewdelegate,uitextviewdelegate,Objective C,Cocoa Touch,Uitextview,Uiscrollviewdelegate,Uitextviewdelegate,我有一个类MyTextView,它继承自UITextView。我还有一个MyViewController,它是UIViewController的子类MyViewController实现UITextViewDelegate协议,并设置为MyTextView的委托 MyViewController实现了UITextViewDelegate中的一些委托方法(如-(void)textViewDidChange:(UITextView*)textView),它们都可以正常工作。但是,当我尝试实现-(voi

我有一个类
MyTextView
,它继承自
UITextView
。我还有一个
MyViewController
,它是
UIViewController
的子类
MyViewController
实现
UITextViewDelegate
协议,并设置为
MyTextView
的委托

MyViewController
实现了
UITextViewDelegate
中的一些委托方法(如
-(void)textViewDidChange:(UITextView*)textView
),它们都可以正常工作。但是,当我尝试实现
-(void)scrollViewDidScroll:(UIScrollView*)scrollView
或某些或其他scroll委托方法时,不会调用它们。我的理解是,这应该是可行的,因为
UITextView
继承自
UIScrollView
,并且
UITextViewDelegate
符合
UIScrollViewDelegate
,它声明了有问题的滚动方法


奇怪的是,如果我进入IB并将文本视图的类从
MyTextView
更改为
UITextView
,所有委托方法都会被调用,包括滚动once。

我没有尝试过,但这可能与协议有关

在这种情况下,第三个答案可能会有所帮助:

您可能重新合成了
委托
属性,这意味着现在有一个新的实例变量是类的私有变量,并且合成了指向该私有变量的访问器。因此,任何引用委托实例变量而不是属性的超类实现都无法通过(当然,那些引用属性的超类实现仍然会调用子类访问器)。看起来可能
UITextField
使用了属性,而
UIScrollView
使用了实例

嗯,我不是定制委托,所以这个问题与我无关。我知道如何使用代表;我已经多次使用过它们(我在Cocoa/Cocoa Touch开发方面相当有经验)。但是我以前没有遇到过我在问题中描述的行为。卡尔,你是绝对正确的。出于某种原因,委托是在MyTextView.m中合成的,我从未想过要查找它,因为我们在这个类中没有声明委托。我相信这一定是另一个类的复制/粘贴问题。有趣的是,Cocoa类在使用属性和实例变量时似乎存在不一致性。所以,有时你能侥幸逃脱,有时你不能。这引起了我的困惑。也许UIScrollView没有将它的委托公开给它的超类,所以它们被迫严格通过属性引用它。