あなたはそれを行うことができますが、カテゴリーを使用することはできません。カテゴリはメソッドを置き換えます。(警告、車の例え)あなたが車を持っていて、その車を破壊して新しい車と交換した場合でも、古い車を使用できますか?いいえ、なくなってもう存在しないからです。カテゴリも同じです。
できることは、Objective-Cランタイムを使用して、実行時に別の名前でメソッドを追加し(たとえば、 " ")、とbogusHitTest:withEvent:
の実装を交換することです。そうすれば、コードがを呼び出すときに、元々がのために書かれたコードが実行されます。次に、そのコードでを呼び出すことができます。これにより、元の実装が実行されます。hitTest:withEvent:
bogusHitTest:withEvent:
hitTest:withEvent:
bogusHitTest:withEvent:
bogusHitTest:withEvent:
したがって、偽のメソッドは次のようになります。
- (UIView *) bogusHitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"executing: %@", NSStringFromSelector(_cmd));
return [self bogusHitTest:point withEvent:event];
}
メソッドを交換するコードは、次のようなものになります。
Method bogusHitTest = class_getInstanceMethod([UIView class], @selector(bogusHitTest:withEvent:));
Method hitTest = class_getInstanceMethod([UIView class], @selector(hitTest:withEvent:));
method_exchangeImplementations(bogusHitTest, hitTest);