我有几个名为 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
YES
的实例或继承自 aClass 的任何类的实例,则返回,否则返回NO
。
我理解它返回的NO
原因:因为 InnerBox 是 NSView 的一种,反之则不然。但我不知道为什么subview
UIView 应该是 InnerBox。
我已导入 InnerBox.h 并确保 InnerBox 确实是 XIB 中的 InnerBox。我不知道是什么导致它的类型改变,或者被错误地报告......