gpt4 book ai didi

iphone - 将 Nib 装入 Nib

转载 作者:行者123 更新时间:2023-12-03 20:30:04 25 4
gpt4 key购买 nike

我是界面构建器的新手,我想要一个包含 UIView 的 3x3 网格的屏幕,每个网格都包含一个 UIImageView 和 4 个 UILabels。

我的逻辑可能有缺陷,但我试图实现这一目标的方式是:

  1. 使用 imageView 和 4 个标签在 IB 中创建 UIView Nib 文件 MyUIView.nib 和布局
  2. 创建一个名为 MyUIView.m 的 UIView 子类,其中包含 1 个 IBOutlet UIImageView 和 4 个 IBOutlet UILabels。将 MyUIView.nib 和 MyUIView.m 作为文件所有者链接并连接 socket 。
  3. 然后创建另一个 Nib MyGridViewController.nib,其中有 9 个 MyUIView,分布在 3x3 网格中。
  4. 创建一个 UIViewController,其中有 9 个 IBOutlet MyUIView 并通过 Interface Builder 连接它们。

是否可以从 InterfaceBuilder 中以图形方式将一个 Nib 加载到另一个 Nib 中,如果可以,我该怎么做?我是否将“标准”UIView 拖到 Canvas 上,然后将类更改为 MyUIView?

或者我是否需要在 MyGridViewController.m 中以编程方式完成这一切,例如:

for (int i=0; i<9; i++)
{
NSArray* nibViews = [[NSBundle mainBundle] loadNibNamed:@"MyUIView" owner:self options:nil];
[myViewArray addObject:[ nibViews objectAtIndex: 1]];
}

我让它工作的唯一其他方法是使用一个 Nib 并放置 9 个 UIImageView 和 36 个 UILabels,但这显然是一种痛苦,当我想要更改某些内容时,因为我需要更新每个 3x3“单元格”。我认为在一个文件中更改它会更容易,并且所有 9 个文件都会更新。

最佳答案

您无法在 Interface Builder 中执行此操作。

我可能会做的是创建一个自定义 View ,例如 MyGridItem,它在唤醒时将 MyUIView.nib 作为 subview 加载,然后在 MyGridView.nib 中使用其中的 9 个 View 。

要小心awakeFromNib,因为如果 View 涉及到两个不同nib的加载,它可能会被调用两次(例如,如果加载MyGridView.nib时MyGridItem是所有者,那么当加载MyGridView.nib时,MyGridItem awakeFromNib将被调用一次作为加载 MyUIView.nib 的一部分加载,并在加载 MyGridView.nib 时加载一次。

此外,由于您加载 Nib 9 次,您可能需要使用一次缓存 Nib

NSNib* theNib = [[NSNib alloc] initWithNibNamed:@"MyGridItem" bundle:nil];

加载它:

if ( [theNib instantiateNibWithOwner:self topLevelObjects:NULL] ) {

在加载完所有九个 subview 后,您可能需要取消分配它。

关于iphone - 将 Nib 装入 Nib ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com