2

ビューである xib ファイルがあり、それを FooView クラスとして指定しました。

私がそれを割り当てるとき:

UINib *fooViewXib = [UINib nibWithNibName:@"FooView" bundle:[NSBundle mainBundle]];
FooView *fooView = [[fooViewXib instantiateWithOwner:self options:nil] lastObject];
fooView.lolLabel.text = @"lol";

私がそれを尋ねると:

[fooView isKindOfClass:[FooView class]];

それはノーと言います...

それでも、fooView オブジェクトを NSLog すると、それは fooView であると表示されます。そして、fooView オブジェクトのクラスを直接 NSLog すると、FooView クラスとして表示されます。

isKindOfClass がこのオブジェクトを正しく識別しないのはなぜですか? また、どうすれば識別できますか?

4

2 に答える 2

0

を使用する代わりにlastObject、正しいクラスのビューが見つかるまで配列をループします。このようにしてください

NSArray *nibViews = [[NSBundle mainBundle] loadNibNamed:@"FooView" owner:self options:nil];
FooView *view;
for (id object in nibViews)
    if ([object isKindOfClass:[FooView class])
        view = object;
// do whatever you want with view

これにより、正しいクラスのビューを確実に取得できます。

于 2013-07-22T03:21:06.980 に答える
0

必要なオブジェクトをアウトレットに接続できる場合、nib をインスタンス化することによって作成された配列を反復処理する必要はありません。コードがどのクラスに属しているかはわかりませんが、それがビュー コントローラーであると仮定します。View Controller で簡単にfooViewアウトレットを作成できます。

@interface MyViewController : UIViewController
...
@property (strong, nonatomic) IBOutlet FooView* fooView;
@end

nib でファイルの所有者のタイプを設定しMyViewController、foo ビューをfooViewファイルの所有者のアウトレットに接続します。selfこれで、View Controllerで nib の所有者として渡すことができます:

UINib *fooViewXib = [UINib nibWithNibName:@"FooView" bundle:[NSBundle mainBundle]];
[fooViewXib instantiateWithOwner:self options:nil];

その後、fooViewプロパティは右側のビューに接続されます。

于 2013-07-22T03:38:29.387 に答える