2013-01-25 67 views
0

的是否有可能重寫子類中的方法以這樣的方式,當超類調用該方法,這些電話還是去原來的方法,但對該方法的所有其他(外部)調用都將轉到重寫的版本?覆蓋的方法,但離開超類的調用該方法將父類的版本方法

背景:如果我子類UITextField和覆蓋getter方法delegate,似乎是依靠委託UITextField內置的行爲來使用後備伊娃訪問委託(而不是觸摸覆蓋的吸氣劑);但是,如果我使用UITextView嘗試同樣的事情,看起來依賴於委託的UITextView的內部行爲使用重寫的getter訪問委託。

+0

你在第一段中所說的是子類化如何工作。子類的實例使用方法的重寫版本;超類的實例使用原件。是的,這可能是'UITextField' interally使用伊娃,而不是直接爲它'delegate'的訪問方法,但它並不清楚什麼是與你的標題和第一段中的問題做。您希望_subclass_使用您的重寫方法來訪問伊娃。我不確定這是可能的。 –

回答

0

可以使用objc運行系統功能

#import <objc/message.h> 

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

即使當我重寫它時,也可以讓我調用超類的實現,對吧?我想使超類的方法調用去其實現,而不是被覆蓋的一個。 – Isaac

+0

是的。消息分派將從您在'objc_super'結構中指定的任何類開始 –

0

我相信你做錯了第二次。
你是說UITextView的子類化和重寫方法....影響超類?
聽起來不對。
我建議確保你使用的視圖是overriden類的對象,而不是默認的UITextView類。

相關問題