如何创建自定义UIView?

时间:2010-08-06 22:59:14

标签: iphone uiview xib init custom-view

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

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

3 个答案:

答案 0 :(得分:5)

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

然后

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];

无需对文件所有者执行任何操作;它甚至在这里设置为零。

答案 1 :(得分:2)

这类似于使用nib文件创建表视图单元格。 Here是一个讨论如何执行此操作的页面。

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

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

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

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

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

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

答案 2 :(得分:0)

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

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

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