Ios 如何在委托方法实现中重新创建调用“super”?

Ios 如何在委托方法实现中重新创建调用“super”?,ios,objective-c,delegates,Ios,Objective C,Delegates,在这种情况下,我希望根据一些运行时配置有条件地实现委托方法。在某些配置下,我想重新创建如果我根本没有实现委托方法会发生什么 具体来说,在UITableViewDelegate方法tableView:titleForDeleteConfirmationButtonFrrowatineXPath:中,我想提供一个特定的专门字符串(如果当前语言已知),但使用默认行为,否则,iOS将使用其“Delete”的翻译到当前语言 如果我重写了一个方法,那么我可以调用[super-myMethod]来调用默认值。

在这种情况下,我希望根据一些运行时配置有条件地实现委托方法。在某些配置下,我想重新创建如果我根本没有实现委托方法会发生什么

具体来说,在
UITableViewDelegate
方法
tableView:titleForDeleteConfirmationButtonFrrowatineXPath:
中,我想提供一个特定的专门字符串(如果当前语言已知),但使用默认行为,否则,iOS将使用其“Delete”的翻译到当前语言


如果我重写了一个方法,那么我可以调用
[super-myMethod]
来调用默认值。如何使用委托方法实现相同的效果?

委托方法通常不会调用
super
实现

通常,默认行为实际上是由委托给您的委托人的对象提供的(我们称之为“委托人”)。委托人在其委托未实现可选委托方法的情况下提供默认行为

您需要让委托人相信您没有实现此委托方法,即使您实现了。您可以通过实现
respondsToSelector:
来实现这一点

在您给出的示例中,您的实现将如下所示:

- (BOOL)respondsToSelector:(SEL)selector {
  // Is this the specific delegate method that is conditional?
  if(selector == @selector(tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:)) {
    const bool iWantToProvideAnImplementation = // Your logic here.
    return iWantToProvideAnImplementation;
  }
  else {
    // Use default behaviour.
    return [super respondsToSelector:selector];
  }
}

现在,当
iWantToProvideAnImplementation
为true时,代理将只调用可选方法。

很好的自我回答,但请注意它不是通用的。一些委托类在执行
respondsToSelector
检查后恢复为默认行为,但其他类更喜欢将回退行为作为API的一部分。(事实上,
UITableView
似乎就是想这么做的,因为它允许结果为空。可能值得[提交一个bug()。)嘿,@rickster,谢谢你的评论!如果你想写一个更全面的答案,我很乐意给你打勾。否则,我会看看在这种情况下我是否可以改进我的答案。我一定会试试你的建议,简单地返回
nil
,看看这是否提供了所需的默认行为。啊——我明白你的意思:-)当你如果您从该委托方法返回
nil
,您会得到一个没有标题的红色删除按钮——可能不是API想要的!