对于UIButton上的“setTitle:”,respondsToSelector返回YES,但是没有这样的选择器

时间:2015-04-27 12:34:24

标签: ios objective-c uibutton respondstoselector

所以我正在使用respondsToSelector:,大部分时间它都可以正常使用。但有一个案例我得错了结果:

UIButton* button = [[UIButton alloc] init];
if([button respondsToSelector:NSSelectorFromString(@"setTitle:")]) // returns YES
{
    // try to call "setTitle:"
}

respondsToSelector:返回YES,但UIButton类中没有setTitle:选择器。有setTitle:forState:选择器,但这绝对不一样。

那么为什么respondsToSelector:会返回YES?

2 个答案:

答案 0 :(得分:1)

响应选择器并不只是检查公共接口,它会采取它可以找到的任何方法。我不记得UIButton的早期API是否直接暴露了标题,但在内部它可能被称为状态变化。

尝试仅对您实际需要验证的API使用respondsToSelector:,并注意通常会有私有API,后来公开,这也会导致有趣的情况......

答案 1 :(得分:0)

Alexandr,只有在想要检查某个对象是否实现了您要调用的方法时,才应使用此“respondsToSelector”方法。并且为了设置Button Title,为什么要求你使用它?

您应该使用此方法,通常使用自定义委托方法..