Общий делегат UITableView

Я пишу подкласс UITableView и хочу, чтобы мой подкласс сам обрабатывал некоторые методы UITableViewDelegate, прежде чем передавать их «настоящему» делегату, а также пересылал все методы UITableViewDelegate, не реализованные моим подклассом.

В подклассе у меня есть частная собственность:

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

который содержит «настоящего делегата», которому должны перенаправляться все нереализованные методы. В обоих моих методах инициализации я установил

self.delegate = self;

и я отвергаю-(void )setDelegate :(id )вот так

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

Затем я переопределяю их для обработки пересылки сообщений

-(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];
    }
}

. Проблема в том, что нереализованные методы делегата никогда не вызываются в табличном представлении, поэтому им не дается шанс быть перенаправленным вместе с объектом _trueDelegate.

Я пытался найти их здесь:

- (BOOL)respondsToSelector:(SEL)aSelector {

}

но этот метод никогда не вызывается для методов UITableViewDelegate, хотя он отлично ловит другие методы.

6
задан Lance 13 July 2012 в 21:39
поделиться