如何检查对象是否是UIButton

时间:2012-07-16 15:52:34

标签: objective-c uibutton

我有一个if语句,需要知道对象类型是否为按钮。

到目前为止,我有:

NSLog(@" %@ ",[myObject class]);

返回UIButton,所以我知道这是有效的。

接下来是if声明:

if([myObject isMemberOfClass:_______])

这是我遇到问题的地方,因为我不允许提供UIButton作为isMemberOfClass:的参数。我尝试使用UIButtonTypeCustom,但它不符合if语句。

有什么建议吗?

感谢。

4 个答案:

答案 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]]) {

}