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

时间:2016-02-09 20:27:02

标签: ios objective-c delegates

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

具体来说,在UITableViewDelegate方法tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:中,我想提供一个特定的专用字符串,如果已知当前语言,但是使用默认行为,否则iOS会使用它将“删除”翻译成当前语言。

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

1 个答案:

答案 0 :(得分:1)

委托方法通常不会调用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为真时调用可选方法。