我有一种情况,我想根据一些运行时配置有条件地实现委托方法。在某些配置下,我想重新创建如果我根本没有实现委托方法会发生什么。
具体来说,在UITableViewDelegate
方法tableView:titleForDeleteConfirmationButtonForRowAtIndexPath:
中,我想提供一个特定的专用字符串,如果已知当前语言,但是使用默认行为,否则iOS会使用它将“删除”翻译成当前语言。
如果我覆盖某个方法,那么我可以调用[super myMethod]
来调用默认值。如何使用委托方法实现相同的效果?
答案 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
为真时调用可选方法。