我正在使用属性isKindOfClass
比较两个类,但似乎不起作用。我已经记录了看似相同的输出,但我不明白他们为什么不工作。
UIView *childView = [view subviews][j-1];
NSLog(@"childview class: %@", childView.class);
NSLog(@"childview.class class: %@", [childView.class class]);
NSLog(@"sfidimmer button class: %@", [SFIDimmerButton class]);
if([childView.class isKindOfClass:[SFIDimmerButton class]]){
NSLog(@"iskindofclass");
curFrameSize = dimFrameWidth;
}
nslogs的输出:
childview class: SFIDimmerButton
childview.class class: SFIDimmerButton
sfidimmer button class: SFIDimmerButton
如果有条件,控件不会进入内部,你能告诉我原因吗?
答案 0 :(得分:4)
不要使用Class就像..
K
希望对你有所帮助。
答案 1 :(得分:2)
您的错误
Self.class
返回类Object,同时使用isKindOfClass
来检查类的实例
您可以使用isKindOfClass
检查某个对象是否是该类的实例,如上所述。
文档
返回一个布尔值,指示接收者是给定类的实例还是从该类继承的任何类的实例。
您还可以使用
检查课程[childView.class isSubclassOfClass:[SFIDimmerButton class]]
返回一个布尔值,指示接收类是否是给定类的子类或相同。
答案 2 :(得分:1)
你的支票错了。你应该在对象上调用isKindOfClass:而不是在对象类上。
所以而不是检查
if([childView.class isKindOfClass:[SFIDimmerButton class]]){
NSLog(@"iskindofclass");
curFrameSize = dimFrameWidth;
}
试试这个
if([childView isKindOfClass:[SFIDimmerButton class]]){
NSLog(@"iskindofclass");
curFrameSize = dimFrameWidth;
}
您也可以使用isMemberOfClass
,但大部分时间都要使用isKindOfClass
:确保您的代码也适用于子类。
isKindOfClass
:如果接收者是指定类的实例或从指定类继承的任何类的实例,则返回YES。
isMemberOfClass
:如果接收者是指定类的实例,则返回YES。
答案 3 :(得分:0)
使用id数据类型的任何对象,然后将其与Class类型进行比较。如果满意,则使用Target类键入强制转换。
id childView = [view subviews][j-1];
if ([childView isKindOfClass:[SFIDimmerButton class]]) {
SFIDimmerButton *btnDimmer = (SFIDimmerButton *)childView;
// perform your action with derived button..
}
希望,它会帮助你。
谢谢。