Objective c 如何调用如果委托不是';不在那里
我正在Cocoa Touch API上实现一个可选的委托方法。我想做的是,首先调用一个方法,如果我没有实现委托,将被调用。。。然后对结果进行更改。。。然后返回我的修改版本 下面是一个例子:Objective c 如何调用如果委托不是';不在那里,objective-c,cocoa,Objective C,Cocoa,我正在Cocoa Touch API上实现一个可选的委托方法。我想做的是,首先调用一个方法,如果我没有实现委托,将被调用。。。然后对结果进行更改。。。然后返回我的修改版本 下面是一个例子: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; { /* this line: */ UIView * headerView = [someObject tableView:
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; {
/* this line: */ UIView * headerView = [someObject tableView:tableView viewForHeaderInSection:section];
[headerView setBackgroundColor:[UIColor redColor]];
return headerView;
}
标记的行不起作用。我可以把someObject=tableView.delegate放进去,但这只会给我无限递归。如果没有实现可选方法,是否有一些技巧可以让tableView执行它将执行的任何操作?我不是特别有希望,但如果可能的话,它会很酷。我猜UtableView的功能是这样的:
if ([delegate respondsToSelector:@selector(tableView:viewForHeaderInSection:)]) {
[delegate tableView:self viewForHeaderInSection:section];
} else {
// Does its own thing instead
}
因此,我认为您不可能通过这种方式获得原始的方法。查看上的文档--它使您能够测试并查看对象是否会响应选择器:)如果您没有实现委托,则不会调用任何方法。委托不像子类;它们不是一种语言特征。UITableView(在本例中)执行一些工作,查看其-delegate属性是否为非nil(这只是一个碰巧被称为“delegate”的随机ivar),如果是这样,它会看到委托实现了委托方法,如果是,则调用它,然后再执行一些工作 UITableView没有公开默认的节头视图(我相信它是一个名为UISectionHeaderCell的私有子类),因此苹果没有承诺如何实现它。或者给我们一个很好的方法来获得它有好几种方法来获得这个观点,但苹果还没有给我们任何支持的方式,我知道 但对于有关委托的一般问题,您所要求的并不存在,因为它不是委托的实现方式