gpt4 book ai didi

ios - 如何在委托(delegate)方法实现中重新调用 `super`?

转载 作者:行者123 更新时间:2023-11-29 12:05:15 27 4
gpt4 key购买 nike

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

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

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

最佳答案

委托(delegate)方法通常不会调用super 实现。

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

您需要让委托(delegate)人相信您没有实现此委托(delegate)方法,即使您实现了。您可以通过实现 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];
}
}

委托(delegate)现在只会在 iWantToProvideAnImplementation 为真时调用可选方法。

关于ios - 如何在委托(delegate)方法实现中重新调用 `super`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35301516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com