UITableView alt sınıfını yazıyorum ve alt sınıfımın, alt sınıfım tarafından uygulanmayan tüm UITableViewDelegate yöntemlerini iletmek için "gerçek" temsilci boyunca iletmeden önce UITableViewDelegate yöntemlerinin bir kısmını kendisinin işlemesini istiyorum. tüm uygulanmayan yöntemler yönlendirsin "gerçek temsilci" tutanPaylaşılan UITableViewDelegate
: alt sınıfında
Ben özel bir özelliği vardır. hem benim init yöntemde de benself.delegate = self;
set ve geçersiz - (void) setDelegate: (id) bu
-(void)setDelegate:(id<UITableViewDelegate>)delegate {
if (delegate != self) {
_trueDelegate = delegate;
} else {
[super setDelegate:self];
}
}
gibi Sonra ileti yönlendirmeyi işlemek için bu geçersiz
-(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];
}
}
Sorun, henüz kullanılmayan temsilci yöntemlerinin hiçbir zaman tablo görünümüne çağrılmamasıdır, bu nedenle _trueDelegate nesnesine iletilmeleri için bir şans verilmez.
Burada onlar için denetimi çalıştı:- (BOOL)respondsToSelector:(SEL)aSelector {
}
ama gayet güzel başka yöntemler yakalar rağmen bu yöntem UITableViewDelegate yöntemleri için hiçbir zaman denir.
Genişletilmiş sınıfınızı temsilci protokollerine uygun olarak bildirdiniz mi? –
Soruyorum çünkü tableView, temsilci yöntemlerini çağırırken "responsesToSelector:" yerine "conformsToProtocol:" işlevini kullanıyor olabilir. –
Gerçekten yaptım, bu çok iyi bir sorun olabilir, ben kontrol edeceğim – Lance