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]];

它说不...

然而,如果我 NSLog fooView 对象,它说它是一个 fooView。如果我直接 NSLog fooView 对象的类,它会显示为 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 创建的数组。你没有说你的代码属于哪个类,但让我们假设它是一个视图控制器。您可以简单地fooView在视图控制器中创建一个插座:

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

将 nib 中 File's Owner 的类型设置为MyViewController并将 foo 视图连接到fooViewFile's Owner 的出口。现在在您的视图控制器中,您可以self作为 nib 的所有者传递:

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

之后,该fooView属性将连接到正确的视图。

于 2013-07-22T03:38:29.387 回答