将子视图添加到 xib 文件

Posted

技术标签:

【中文标题】将子视图添加到 xib 文件【英文标题】:Add subview to a xib file 【发布时间】:2015-02-03 01:40:40 【问题描述】:

我正在尝试向 xib 文件中的 UIView 添加标签。当我运行应用程序时,标签不显示。

- (void)viewDidLoad 
    [super viewDidLoad];
    self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];
    [self.label setText:@"This is a label"];

    xibView *myxibView = [[xibView alloc] init];
    [myxibView.myView addSubview:self.label];

【问题讨论】:

您创建了一个 xibView 的本地实例,您没有将它添加到任何地方并且没有显示该视图。那么你怎么能期望它显示标签呢? xib 是自定义单元格。我正在尝试以编程方式添加标签 一个简单的例子:你把面包(xibView)放在你家(Storyboard)上。现在你在你的办公室(viewDidLoad),你买了一个新面包(创建了一个新的xibView实例)并在上面放了蜂蜜(标签)。现在你说你留在家里的面包上看不到蜂蜜。希望你能理解。 那我该如何改变呢? 将一个outlet连接到storyboard中已有的xibView并使用它。 【参考方案1】:

1.如果你的控制器和你的xib同名, 例如,XibViewController.m & XibViewController.xib。 默认情况下,您的控制器会将其视图设置为 XibViewController.xib 的实例。

在这种情况下,您只需将标签添加到 self.view

[self.view addSubview:self.label];

2.如果要将 XibViewController.xib 加载到不同名称的控制器,如 View2Controller.m,则需要按名称加载 xib 并将 xib 视图添加到 View2Controller 的视图中。

UIView *myxibView = [[[NSBundle mainBundle] loadNibNamed:@"XibViewController" owner:self options:nil] objectAtIndex:0];
[myxibView addSubview:self.label];
[self.view addSubview:myxibView];

【讨论】:

我认为这个答案是不言自明的,必须接受【参考方案2】:
xibView *myxibView = [[xibView alloc] init];
[myxibView.myView addSubview:self.label];

您没有将 myxibView 添加到实际视图中。它只是一个例子。你为什么不这样做:

 [self.view addSubview:self.label];

希望这会有所帮助.. :)

【讨论】:

xib 有一个名为 myView 的视图,我将它放在 storyBoard 中。而 xib 是一个自定义单元格。我正在尝试以编程方式添加标签【参考方案3】:

只需添加,

self.label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 50, 200)];
[self.label setText:@"This is a label"];
[self.view addSubview:self.label];

它将子视图标签放在视图上。

【讨论】:

以上是关于将子视图添加到 xib 文件的主要内容,如果未能解决你的问题,请参考以下文章

添加和布局从 xib 加载的子视图到自定义单元格

添加和切换子视图

将 xib 文件中的视图添加到 UITableViewCell 添加约束

将两个 xib 文件中的两个 tableviews 添加到主 xib 视图

将子视图添加到自定义类

Cocoa:将子视图添加到来自不同类和 nib 的视图