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没有将它的委托公开给它的超类,所以它们被迫严格通过属性引用它。