2

我有几个名为 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:

如果接收者是aClassYES的实例或继承自 aClass 的任何类的实例,则返回,否则返回NO

我理解它返回的NO原因:因为 InnerBox 是 NSView 的一种,反之则不然。但我不知道为什么subviewUIView 应该是 InnerBox。

我已导入 InnerBox.h 并确保 InnerBox 确实是 XIB 中的 InnerBox。我不知道是什么导致它的类型改变,或者被错误地报告......

4

1 回答 1

0

据我所知,isKindOfClass:YES它遇到你的InnerBox. 也许视图没有按照您的意图嵌套。要检查的两件事:

  1. NSButton真的是superviewOuterBox吗?(您可以NSLog在按钮的操作方法中查看发送者的超级视图。)
  2. 真的InnerBox是子视图 OuterBox吗?(也许设置一个IBOutletto theInnerBoxNSLog它的 superview。)
于 2010-10-05T01:44:07.673 回答