我試圖開發一個控件,它將模仿UITableView控件的行爲。我已經定義了一個代表協議如下:在自定義視圖中重現tableView委託行爲
@protocol HPSChoiceDelegate
- (void)choiceView:(HPSChoice *)choiceView didSelectChoice:(NSNumber*)selectedIndex;
@end
用戶可以點擊主控制視圖中的子視圖。我有TapGesture識別器,在主控制視圖內激活了方法。我把這些連線如下:
UITapGestureRecognizer *containerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(didSelectChoice:)];
然後我在視圖中有一個方法,試圖在委託中調用正確的方法。在視圖中的方法是這樣的:
-(void)didSelectChoice:(UITapGestureRecognizer*)sender
{
NSNumber* selectedIndex = [NSNumber numberWithInt:sender.view.tag];
[(id)self.delegate performSelector:@selector(didSelectChoice:) withObject:selectedIndex afterDelay:0.0f];
}
在委託控制器I定義了下列方法:
- (void)choiceView:(HPSChoice *)choiceView didSelectChoice:(NSNumber*)selectedChoice
{
NSLog(@"HPSFormController didSelectChoice:(HPSChoice*)choiceView tag = %@",[[choiceView class] description]);
}
這一切都編譯,並且當我挖掘控制,則didSelectChoice被稱爲在該視圖然後在委託中調用該方法。但是,代理方法崩潰,出現以下錯誤:
-[HPSFormController didSelectChoice:]: unrecognized selector sent to instance 0x29b4e0
如何解決此問題?非常感謝。
只是一個提示:你不能保證有一個委託,如果它沒有被標記爲強制性的,它也不會對選擇器做出回答。所以,這樣做:'if(delegate && [delegate respondsToSelector:@selector(foo :)]){[delegate performSelector:@selector(foo :) withObject:bar]; ]' – Cyrille