将视图控制器分配给自定义.xib

时间:2015-11-10 00:20:39

标签: ios objective-c xcode uiviewcontroller xib

我有一个我自己创建的自定义可重用XIB,并从UIView为它分配了一个类子类。

  • BannerView.xib(文件所有者设置正确
  • BannerView.h:UIView
  • BannerView.m

这是initWithFrame:

-(instancetype)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame];

if(self) {
self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
}

return self;
}

一切正常,我可以初始化这个自定义.xib并将其添加到我的VC:

BannerView *bannerView = [[BannerView alloc]init];
[_profileContentArea addSubview:bannerView];

虽然,我希望这个自定义.xib拥有它自己的VC,然后能够通过VC而不是上面的方式添加为子视图。考虑到我现有的设置,我将如何解决这个问题。

2 个答案:

答案 0 :(得分:0)

您的init方法是initWithFrame,因此您必须创建类似

的BannerView
BannerView *bannerView = [[BannerView alloc]initWithFrame:frame];

然后你可以添加到ViewController

答案 1 :(得分:0)

-(instancetype)initWithFrame:(CGRect)frame {

self = [super initWithFrame:frame]; 

if(self) {
    self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];
}

    return self;
}

请注意初始化步骤

+alloc:分配内存 -init:初始化必要的属性

当您致电alloc并在initinitWithFrame:

中设置一些属性时,您已经获得了视图对象

当你打电话

self = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:self options:nil] firstObject];

旧的视图对象已经消失,因为您刚刚设置了一个来自xib的新视图

你为什么不使用 - [UIViewController initWithNibName:nibBundle:]你可以随意设置nib