2012-07-16 165 views
2

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

到目前为止,我有:

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

返回UIButton,所以我知道这是工作。

接下来是if声明:

if([myObject isMemberOfClass:_______]) 

这是我遇到的问题,因为我不能提供UIButtonisMemberOfClass:参数。我尝试使用UIButtonTypeCustom,但它不符合if声明。

有什么建议吗?

谢谢。

回答

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"); 
0

最简单的一种是

if([myObj class] == [UIButton class]) 

根据你的代码你缺少

if([myObject isMemberOfClass:[UIButton class]]) 
+0

ahh我应该想到这一点。它工作完美,谢谢! – BloonsTowerDefence 2012-07-16 15:56:22

+0

如果myObj子类为UIButton,这将不起作用。 – lorean 2012-07-16 15:57:56

+0

@lorean是的,这不适用于子类,也不会'isMemberOfClass'工作。为此,你必须使用'isKindOfClass' – 2012-07-16 15:59:51

0
if ([myObject isMemberOfClass:[UIButton class]]) { 

} 

OR

if ([myObject isKindOfClass:[UIButton class]]) { 

} 
1

对于IS-一个UIButton检查,这是首选方法 因为我t会检查它是否是作为UIButton站立的NSProxy。虽然任何人都会这样做是值得怀疑的。

[myObject isMemberOfClass:[UIButton class]] 

if([myObject class] == [UIButton class]) 

对于UIButton的

的是,一个或子类
[myObject isKindOfClass:[UIButton class]] 

通常你想使用[myObject respondsToSelector:@selector(someSelector:)]或者(如果myObject的是NSProxy站在对的UIButton会失败) [myObject conformsToProtocol:@protocol(someProtocol)]使用特定函数时,因为myObject可能不是您想要的类,但可以实现所需的功能。