在使用XIB文件继承UIView时,为什么我需要将contentView属性作为子视图来显示XIB?

时间:2017-10-25 12:29:17

标签: ios cocoa-touch

所以我有一个UIView的子类 - 让我们称之为CustomView - 带有一个XIB文件,用于其子视图的布局。

在界面构建器中,我将顶级视图的自定义类设置为CustomView,并创建一个类方法来加载XIB,并在我需要在应用程序的其他位置使用它时返回该顶级视图。

CustomView.m

+(instancetype)newCustomView
{
    CustomView *customView = [[[NSBundle mainBundle] loadNibNamed: @"CustomView" owner: nil options: nil] firstObject];

    ...

    return customView;    
}    

ViewController.m

-(void)viewDidLoad
{
    ...

    CustomView *firstCustomView = [CustomView newCustomView];
    [self.view addSubview: firstCustomView]; 
}

这一切都有效,我可以很方便地访问CustomView的网点,但感觉非常hacky。查看使用关联的XIB初始化UIView子类的传统方法我发现使用相同方法的一篇文章,但大多数教程使用了以下的一些变体:

  • 将文件所有者设置为UIView子类。 (不要为顶级视图设置自定义类)

  • 将classView插座添加到类中,并将其设置为界面构建器中的顶级视图。

  • 创建一个加载Nib的方法,并将contentView添加为该类的子视图。

  • 在initWithFrame:和initWithCoder中调用此方法:。

这也有效,但我不明白为什么有必要将contentView属性设置为IB的顶级视图作为子视图。如果CustomView已经是UIView,为什么我不能将自己设置为顶级视图?那不是更直接吗?我觉得我尝试理解的越多越有意义。

为任何帮助干杯!

0 个答案:

没有答案