Objective c 如何调用如果委托不是';不在那里

Objective c 如何调用如果委托不是';不在那里,objective-c,cocoa,Objective C,Cocoa,我正在Cocoa Touch API上实现一个可选的委托方法。我想做的是,首先调用一个方法,如果我没有实现委托,将被调用。。。然后对结果进行更改。。。然后返回我的修改版本 下面是一个例子: - (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section; { /* this line: */ UIView * headerView = [someObject tableView:

我正在Cocoa Touch API上实现一个可选的委托方法。我想做的是,首先调用一个方法,如果我没有实现委托,将被调用。。。然后对结果进行更改。。。然后返回我的修改版本

下面是一个例子:

- (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的私有子类),因此苹果没有承诺如何实现它。或者给我们一个很好的方法来获得它有好几种方法来获得这个观点,但苹果还没有给我们任何支持的方式,我知道

但对于有关委托的一般问题,您所要求的并不存在,因为它不是委托的实现方式