私は物事が実際にどのように機能するかを理解しようとします。だから私はカテゴリを使って特定のメソッドを上書きすると思っていましたが、興味深いNSLogを取得します。メソッドをカテゴリに上書きする際の元の実装を呼び出す方法は?
@implementation UIView(Learning)
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
NSLog(@"-hitTest:withEvent: event=%@", event);
return [self hitTest:point withEvent:event];
}
@end
ここでスーパーと自己は動作しません。 -hitTest:withEvent:?の元の実装を呼び出す方法はありますか?私が欲しいのは毎回NSLogです-hitTest:withEvent:はUIViewで呼び出されます。
これは単なる学習目的のためのものです。私はイベントの配信を実際に見たいと思う。
スーパーがあなたのために「のカテゴリでは動作しません:の線に沿って何かになる方法を交換する
コード:
だから、偽の方法は次のようになります。同じクラスでそれを呼び出すのではなく、あなたはクラスのスーパーでそれを呼んでいます。この場合、スーパーはhitTest:withEventメソッドを持たないUIResponderです。 selfを呼び出すと無限ループになります。なぜならあなたはhitTest:overEventを "self"に置き換えているからです。 –
私のコメントはちょっと変わっているようですが、前のコメントが削除される前には意味がありました。 –