respondsToSelector returns YES for "setTitle:" on UIButton 但没有这样的选择器
respondsToSelector returns YES for "setTitle:" on UIButton but there is no such selector
我正在使用 respondsToSelector:
,大多数情况下它工作正常。但是有一种情况我得到了错误的结果:
UIButton* button = [[UIButton alloc] init];
if([button respondsToSelector:NSSelectorFromString(@"setTitle:")]) // returns YES
{
// try to call "setTitle:"
}
respondsToSelector:
returns 是,但 UIButton class 中没有 setTitle:
选择器。有 setTitle:forState:
选择器,但这绝对不一样。
那么为什么 respondsToSelector:
return 是?
响应选择器不只是检查 public 接口,它会采用它能找到的任何方法。我不记得 UIButton
的早期 API 是否曾直接公开标题,但在内部它可能被称为状态变化。
尝试仅将 respondsToSelector:
用于您实际需要验证的 API 是否存在,并注意通常有私有 API,稍后会生成 public 和这也会导致有趣的情况...
Alexandr,只有当您要检查对象是否实现了您将要调用的方法时,才应使用此 "respondsToSelector" 方法。还有设置Button Title,为什么要用这个??
您通常在使用自定义委托方法时应该使用此方法..
我正在使用 respondsToSelector:
,大多数情况下它工作正常。但是有一种情况我得到了错误的结果:
UIButton* button = [[UIButton alloc] init];
if([button respondsToSelector:NSSelectorFromString(@"setTitle:")]) // returns YES
{
// try to call "setTitle:"
}
respondsToSelector:
returns 是,但 UIButton class 中没有 setTitle:
选择器。有 setTitle:forState:
选择器,但这绝对不一样。
那么为什么 respondsToSelector:
return 是?
响应选择器不只是检查 public 接口,它会采用它能找到的任何方法。我不记得 UIButton
的早期 API 是否曾直接公开标题,但在内部它可能被称为状态变化。
尝试仅将 respondsToSelector:
用于您实际需要验证的 API 是否存在,并注意通常有私有 API,稍后会生成 public 和这也会导致有趣的情况...
Alexandr,只有当您要检查对象是否实现了您将要调用的方法时,才应使用此 "respondsToSelector" 方法。还有设置Button Title,为什么要用这个??
您通常在使用自定义委托方法时应该使用此方法..