我有一个继承自MyTextView
的班级UITextView
。我还有一个MyViewController
,它是UIViewController
的子类。 MyViewController
实现UITextViewDelegate
协议,并设置为MyTextView
的委托。
MyViewController
实现了UITextViewDelegate
中的一些委托方法(如- (void)textViewDidChange:(UITextView *)textView
),它们都可以正常工作。但是,当我尝试实现- (void)scrollViewDidScroll:(UIScrollView *)scrollView
或某些或其他滚动委托方法时,它们不会被调用。我的理解是,这应该有效,因为UITextView
继承自UIScrollView
和UITextViewDelegate
符合UIScrollViewDelegate
,它声明了相关的滚动方法。
奇怪的是,如果我进入IB并将文本视图的类从MyTextView
更改为UITextView
,则会调用所有委托方法,包括滚动onces。
答案 0 :(得分:1)
您可能重新合成了delegate
属性,这意味着现在有一个专用于您的类的新实例变量,以及指向该私有变量的合成访问器。因此,任何通过实例变量而不是属性引用委托的超类实现都无法通过(当然,那些引用该属性的类仍将调用您的子类访问器)。看起来可能UITextField
使用该属性而UIScrollView
使用该实例!
答案 1 :(得分:0)
我没试过这个,但它可能与协议有关吗?
在这种情况下,第三个答案可能会有所帮助: How to use custom delegates in Objective-C