4

我正在尝试使用 nib 和附带的 .h/.m 文件创建自定义视图,然后通过 IB 创建该视图的多个实例,并将它们用作另一个视图的子视图。

  1. 我创建了 .h/.m 文件
  2. 我创建了xib。
  3. 对于 xib,我在 IB 中指定类名。
  4. 向 xib 添加一些标签(其值将以编程方式更改)
  5. 我将情节提要中的一个简单视图拖到我的容器视图中。
  6. 我将拖动视图的类设置为我为 xib 指定的类。

我多次执行第 5 步和第 6 步,每个我想要的视图一次。最终,我会将这些视图连接到父视图类上的 IBOutlets。

显然我做错了什么,因为我没有在自定义视图中看到我的标签。我怀疑我需要将笔尖与视图直接关联起来,就像您对集合/表格视图所做的那样,但我还没有找到在哪里执行此操作。

这样做的正确方法是什么?我想我可以以编程方式添加视图,但是如何处理各种设备的布局(例如 iphone 4 vs 5)?

4

2 回答 2

7

我在下面概述的内容似乎有效

1) 为您的自定义视图创建 xib 和 .h/.m 文件。
1a) 假设您需要 IBOutlets 来查看您想要控制的元素,请在身份检查器中为文件所有者提供在您的 .h 文件中定义的类名。

2) 在 .h 文件中定义一个属性

@property (nonatomic, retain) IBOutlet UIView *contentView;

2a) 为您希望以编程方式访问的 xib 中的所有子视图定义出口。

3)在.m文件中合成属性并执行

- (void)awakeFromNib
{
    NSLog(@"awake from nib");
    [[NSBundle mainBundle] loadNibNamed:@"yourNibName" owner:self options:nil];
    [self addSubview:self.contentView];
}

4) 将空视图从调色板拖到故事板中的容器中。将这些视图的类更改为 .h 文件中定义的类名。

当您运行您的应用程序时,您应该在子视图中看到 xib 的内容。

5) 您现在可以在容器视图的 .h 文件中定义自定义子视图实例的出口,并像往常一样在情节提要中连接它们。

于 2013-01-22T13:06:18.923 回答
2

您不能在 xib 中创建视图并在情节提要中使用它。如果您已经在 xib 文件中创建了它,则可以将其复制并粘贴到情节提要中。如果您希望它成为控制器的根视图,请删除您使用控制器获得的视图,然后从 xib 中粘贴该视图。然后,您可以将这些视图的类更改为您的自定义类。

我不确定您所说的“另一个视图的子视图”是什么意思——视图没有父子关系,它是视图子视图关系。此外,您通常不会(曾经?)将视图拖到容器视图中。容器视图包含一个视图控制器,当您将容器视图添加到另一个视图时,您会自动获得该控制器。该控制器是其视图中包含容器视图的控制器的子级。如果您希望您的自定义视图出现在该容器视图所在的位置,那么您可以将该视图添加到子控制器的视图中(或将该视图替换为您的视图)。

于 2013-01-22T02:16:01.673 回答