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であることを確認しました。タイプが変更されたり、誤って報告されたりする原因がわかりません...