Shared UITableViewDelegate

Ich schreibe eine Unterklasse von UITableView und möchte, dass meine Unterklasse einige der UITableViewDelegate-Methoden selbst handhabt, bevor sie sie an den "echten" Delegaten weiterleitet sowie alle UITableViewDelegate-Methoden weiterleitet, die nicht von meiner Unterklasse implementiert wurden.

In der Unterklasse habe ich ein Privateigentum:

@property (nonatomic, assign) id <UITableViewDelegate> trueDelegate;

Das ist der "echte Delegat", an den sich alle nicht implementierten Methoden wenden sollten. In meinen beiden Init-Methoden setze ich

self.delegate = self;

und ich überschreibe - (void) setDelegate: (id) so

-(void)setDelegate:(id<UITableViewDelegate>)delegate {
    if (delegate != self) {
        _trueDelegate = delegate;
    } else {
        [super setDelegate:self];
    }
}

Dann überschreibe ich diese, um die Nachrichtenweiterleitung zu handhaben

-(NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector {
    NSMethodSignature *sig;
    sig = [[self.delegate class] instanceMethodSignatureForSelector:aSelector];
    if (sig == nil) {
        sig = [NSMethodSignature signatureWithObjCTypes:"@^v^c"];
    }
    return sig;
}

- (void)forwardInvocation:(NSInvocation *)anInvocation {
    SEL selector = anInvocation.selector;
    if ([self respondsToSelector:selector]) {
        [anInvocation invokeWithTarget:self];
    } else {
        [anInvocation invokeWithTarget:_trueDelegate];
    }
}

Das Problem besteht darin, dass die nicht implementierten Delegatmethoden in der Tabellenansicht nie aufgerufen werden und daher keine Chance haben, an das _trueDelegate-Objekt weitergeleitet zu werden.

Ich habe versucht, nach ihnen zu suchen:

- (BOOL)respondsToSelector:(SEL)aSelector {

}

Diese Methode wird jedoch nie für die UITableViewDelegate-Methoden aufgerufen, obwohl andere Methoden problemlos abgefangen werden können.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage