2

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

到目前为止,我有:

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

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

接下来是if声明:

if([myObject isMemberOfClass:_______])

这是我遇到问题的地方,因为我不允许UIButton作为isMemberOfClass:. 我尝试使用UIButtonTypeCustom,但它不满足if声明。

有什么建议么 ?

谢谢。

4

4 回答 4

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");
于 2012-07-16T16:30:26.723 回答
1

对于 is-a UIButton 检查,这是首选方法,因为它将检查它是否是作为 UIButton 的 NSProxy。尽管有人会这样做是值得怀疑的。

[myObject isMemberOfClass:[UIButton class]]

或(如果 myObject 是代表 UIButton 的 NSProxy 将失败)

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

对于 UIbutton 的 is-a 或子类

[myObject isKindOfClass:[UIButton class]]

通常,您可能希望使用[myObject respondsToSelector:@selector(someSelector:)][myObject conformsToProtocol:@protocol(someProtocol)]在使用特定功能时使用,因为 myObject 可能不是您想要的类,但可以实现所需的功能。

于 2012-07-16T16:26:59.630 回答
0

最简单的是

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

根据您的代码,您缺少

if([myObject isMemberOfClass:[UIButton class]])
于 2012-07-16T15:55:16.557 回答
0
if ([myObject isMemberOfClass:[UIButton class]]) {

}

或者

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

}
于 2012-07-16T15:56:29.083 回答