重写一个方法,但是让超类对该方法的调用转到超类的该方法的版本

时间:2013-01-25 01:09:09

标签: objective-c override subclass superclass

是否有可能以这样的方式覆盖子类中的方法:当超类调用该方法时,这些调用仍然转到原始方法,但对该方法的所有其他(外部)调用都将转到被覆盖的版本?

背景:如果我将UITextField子类化并覆盖delegate的getter,则依赖于委托的UITextField的内置行为似乎使用支持ivar访问代表(而不是触及被覆盖的getter);但是,如果我对UITextView尝试相同的事情,那么依赖于委托的UITextView的内部行为似乎使用重写的getter来访问委托。

2 个答案:

答案 0 :(得分:0)

您可以使用objc运行时函数

#import <objc/message.h>

objc_super superstruct = {self, [UITextField class]};
objc_msgSendSuper(&superstruct, _cmd, args...);

答案 1 :(得分:0)

我相信你第二次做错了。
你是说继承UITextView并重写方法....会影响超类?
根本听起来不对。
我建议确保您使用的视图是overriden类的对象,而不是默认的UITextView类。