我有一些名为OuterBox和InnerBox的自定义NSBox子类。我在XIB中设置了我的视图并按如下方式排列了层次结构:
OuterBox : NSBox
NSButton
NSBox
InnerBox : NSBox
...and some other views
这个想法是当按下NSButton时,在IBAction方法中,我想获得按钮的超级视图,然后从中获取与按钮位于同一个OuterBox中的InnerBox。
为此,我遍历OuterBox的子视图并检查其类型:
for (NSObject *subview in [outerBox subviews]) {
// this never evaluates to true...
if ([subview isKindOfClass:[InnerBox class]]) {
// ...
}
}
问题是我的if
声明永远不会发生。 subview
在调试器中显示为NSView。根据文档,isKindOfClass:
如果接收者是aClass的实例或从aClass继承的任何类的实例,则返回
YES
,否则NO
。
我理解为什么它会返回NO
:因为InnerBox是一种NSView,但反之亦然。但我不知道为什么subview
是一个UIView,它应该是一个InnerBox。
我已经导入了InnerBox.h,并确保InnerBox确实是XIB中的InnerBox。我不知道是什么原因导致它的类型被改变,或报告错误......
答案 0 :(得分:0)
据我所知,isKindOfClass:
遇到你的YES
时应该InnerBox
。也许这些观点不是按照你的意图嵌套的。要检查两件事:
NSButton
的超级视图吗?
OuterBox
? (您可以在按钮的操作方法中NSLog
发件人的超级视图。)InnerBox
真的是一个子视图
OuterBox
? (也许可以在其IBOutlet
和InnerBox
的超级视图中设置NSLog
。)