我有一个if
语句,需要知道对象类型是否为按钮。
到目前为止,我有:
NSLog(@" %@ ",[myObject class]);
返回UIButton
,所以我知道这是有效的。
接下来是if
声明:
if([myObject isMemberOfClass:_______])
这是我遇到问题的地方,因为我不允许提供UIButton
作为isMemberOfClass:
的参数。我尝试使用UIButtonTypeCustom
,但它不符合if
语句。
有什么建议吗?
感谢。
答案 0 :(得分:7)
其他答案和评论已经在这方面得到了解决,但它可以更明确。
使用isMemberOfClass:
时,参数必须是Class
个对象。您可以使用class
选择器为任何类获取其中一个。因此:
if ([myObject isMemberOfClass:[UIButton class]])
NSLog(@"It's a UIButton");
else
NSLog(@"It's not a UIButton");
现在,如果对象特别是isMemberOfClass:
的实例,YES
将只返回UIButton
。但是,感兴趣的是对象是否从特定类继承更为常见 - 尤其是在这里,因为UIKit可能在幕后使用UIButton
的私有子类。为此,您需要isKindOfClass:
代替:
if ([myObject isKindOfClass:[UIButton class]])
NSLog(@"It's a UIButton or some subclass");
else
NSLog(@"It's not a UIButton");
答案 1 :(得分:1)
对于is-a UIButton检查,这是首选方法 因为它会检查它是否是作为UIButton站立的NSProxy。虽然任何人都会这样做是值得怀疑的。
[myObject isMemberOfClass:[UIButton class]]
或(如果myObject是NSProxy代表UIButton,则会失败)
if([myObject class] == [UIButton class])
对于UI按钮的is-a或子类
[myObject isKindOfClass:[UIButton class]]
通常,在使用特定函数时,您可能希望使用[myObject respondsToSelector:@selector(someSelector:)]
或[myObject conformsToProtocol:@protocol(someProtocol)]
,因为myObject可能不是您想要的类,但可以实现所需的功能。
答案 2 :(得分:0)
最简单的是
if([myObj class] == [UIButton class])
根据您的代码,您缺少
if([myObject isMemberOfClass:[UIButton class]])
答案 3 :(得分:0)
if ([myObject isMemberOfClass:[UIButton class]]) {
}
OR
if ([myObject isKindOfClass:[UIButton class]]) {
}