如果代理不在那里,如何调用将被调用的方法

Sim*_*ide 3 cocoa objective-c

我正在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;
}
Run Code Online (Sandbox Code Playgroud)

标记的行不起作用.我可以把someObject = tableView.delegate,但这只是给我无限递归.有没有一些技巧可以让tableView做任何事情,如果没有实现可选方法呢?我不是很有希望,但如果可能的话会很酷.

Rob*_*ier 6

如果您没有实现委托,则不会调用任何方法.代表不像子类; 它们不是语言功能.UITableView(在这种情况下)做了一些工作,看看它的-delegate属性是否为非零(这只是一个恰好被称为"委托"的随机ivar),如果是这样,它会看到委托实现了委托方法,如果它调用它,然后再做一些工作.

UITableView没有公开默认的节标题视图(我相信它是一个名为UISectionHeaderCell的私有子类),因此Apple没有对它的实现方式做出任何承诺.或者给我们一个很好的方法来获取它有几种方法可以进入相关视图,但Apple尚未向我们提供任何我所知道的支持方式.

但是对于关于代表的一般问题,你所要求的并不存在,因为代理的实现方式并不存在.