UITableViewDelegate compartilhado
Estou escrevendo uma subclasse de UITableView e quero que minha subclasse manipule alguns dos métodos UITableViewDelegate em si antes de passá-los para o delegado "real", bem como encaminhar todos os métodos UITableViewDelegate não implementados pela minha subclasse.
Na subclasse eu tenho uma propriedade privada:
@property (nonatomic, assign) id <UITableViewDelegate> trueDelegate;
que detém o "delegado real" que todos os métodos não implementados devem encaminhar para. Em ambos os meus métodos init eu defini
self.delegate = self;
e eu substituir - (void) setDelegate: (id) como este
-(void)setDelegate:(id<UITableViewDelegate>)delegate {
if (delegate != self) {
_trueDelegate = delegate;
} else {
[super setDelegate:self];
}
}
Então eu substituí-los para lidar com o encaminhamento de mensagens
-(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];
}
}
O problema é que os métodos delegados não implementados nunca são chamados na tableview, portanto, eles não têm a chance de serem encaminhados para o objeto _trueDelegate.
Eu tentei procurar por eles aqui:
- (BOOL)respondsToSelector:(SEL)aSelector {
}
mas esse método nunca é chamado para os métodos UITableViewDelegate embora ele capture outros métodos muito bem.