如何调用超类的协议功能?

乔乔

在我的UITableViewController子类中,我覆盖了scrollViewDidScroll。我还想调用父类的scrollViewDidSroll,以防它需要运行某些东西。这样做时,我收到无法识别的选择器错误。如果我检查它是否响应选择器,那怎么可能?

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
  if ([super respondsToSelector:@selector(scrollViewDidScroll:)]) {
    // unrecognized selector
    [super scrollViewDidScroll:scrollView];
  }
  // My child class's specific stuff
}
voromax

您无法通过respondsToSelector:使用super关键字发送给对象来测试对象是否从其超类继承方法此方法仍将测试整个对象,而不仅仅是超类的实现。因此,发送respondsToSelector:super等同于将其发送给自己。相反,您必须直接在对象的超类上调用NSObjectclass方法instancesRespondToSelector:,如以下代码片段所示。

if( [MySuperclass instancesRespondToSelector:@selector(aMethod)] ) {
    // invoke the inherited method
    [super aMethod];
}

您不能简单地使用它,[[self superclass] instancesRespondToSelector:@selector(aMethod)]因为如果子类调用该方法,则可能导致该方法失败。

请注意,如果接收方能够将aSelector消息转发到另一个对象,则即使此方法返回,它也可以间接响应消息NO

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章