0

我创建了一个 UIView 子类和相应的 xib 文件,其中我已经布置了一些 UILabel 和 UIImageViews。然后我想将此自定义 UIView 的多个副本放入 UIViewController。

当我这样做时,它们在界面生成器中显示为空白,并且在应用程序加载时不会出现。我需要在 UIView 子类上实现哪些方法才能使其工作?

4

3 回答 3

5

到目前为止,最简单的方法是创建一个将 File's Owner 设置为 NSObject 的 nib,其中包含一个包含您的布局元素的视图。

然后

NSArray *arr = [[NSBundle mainBundle] loadNibNamed:@"MyView" owner:nil options:nil];
UIView *fv = [[arr objectAtIndex:0] retain];

// now you have the view, do something with it:
fv.center = CGPointMake(100,100);
[self.view addSubview:fv];

无需对文件的所有者做任何事情;它甚至在这里设置为零。

于 2010-08-07T09:49:05.677 回答
2

这类似于使用 nib 文件创建表格视图单元格。是一个讨论如何做到这一点的页面。

您需要在UIViewController自定义视图的子类中放置一个插座,并UIViewController在自定义视图 nib (.xib) 文件中将子类设置为“文件所有者”。然后将您创建的插座连接到顶级视图对象(再次在您的自定义视图 nib 文件中)。

然后每次你想在你的视图控制器代码中实例化你的自定义视图时,调用:

[[NSBundle mainBundle] loadNibNamed:<custom view nib name> owner:self options:nil];

然后,您添加的插座将被设置为指向您的自定义视图的新实例。

这种方法的唯一缺点是您必须在视图控制器中以编程方式而不是在界面构建器中以图形方式布置自定义视图的实例。

另一种方法是在您的子类中以编程方式创建放置标签和图像UIView,然后您可以像添加任何其他UIView子类一样将其添加到界面构建器中。

于 2010-08-06T23:22:49.730 回答
0

编辑:不幸的是,在 Xcode 4.0 中,此功能已被删除。

在 Interface Builder 中配置好子视图后,您可以创建一个新组(使用库窗口底部的 cog 按钮)并从列表视图(即不是布局)中拖动子类对象(包含图像和标签)查看)回到库窗口。

然后,您可以将视图子类的多个实例以图形方式添加到任何界面构建器视图或窗口,就像使用库中的内置对象一样。

于 2010-08-06T23:33:31.310 回答