iphone - 将 Nib 装入 Nib

标签 iphone objective-c

我是界面构建器的新手,我想要一个包含 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/

相关文章:

iphone - UIButton 位于 UILabel 文本+iPhone 之间

ios - Objective-C 101(保留与分配)NSString

objective-c - 如何旋转 NSTextView

ios - 在 UIImageView 上画线的最佳实用方法?

ios - 向上滚动时 TableView Cell 发生变化

iphone - iPhone 和服务器之间的安全通信?

iphone - "_OBJC_CLASS_$_PLCrashReport"错误如何解决,在iphone中引用

iphone - 当我将我的应用程序提交到 Apple 应用程序商店时,他们会看到我的源代码吗?

iphone - 应用程序在访问 NSDictionary 的值时崩溃但在访问其键时不崩溃?

ios - 如何平滑地改变 Swift 3 中的屏幕亮度?