我有一个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。如果我直接NSLog fooView对象的类,它会显示为一个FooView类。
为什么isKindOfClass不能正确识别这个对象,我该如何识别?
发布于 2013-07-22 11:21:07
不使用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-22 11:38:29
当您可以将想要的对象连接到插座时,不需要遍历通过实例化nib创建的数组。您没有说明您的代码属于哪个类,但让我们假设它是一个视图控制器。您可以简单地在视图控制器中将fooView设为插座:
@interface MyViewController : UIViewController
...
@property (strong, nonatomic) IBOutlet FooView* fooView;
@end在nib中将文件所有者的类型设置为MyViewController,并将foo视图连接到文件所有者的fooView outlet。现在,在视图控制器中,您只需将self作为nib的所有者传递即可:
UINib *fooViewXib = [UINib nibWithNibName:@"FooView" bundle:[NSBundle mainBundle]];
[fooViewXib instantiateWithOwner:self options:nil];之后,fooView属性将连接到右侧视图。
https://stackoverflow.com/questions/17779273
复制相似问题