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想要的!