2010-08-06 41 views
0

我已经创建了一个UIView子类和相应的xib文件,我已经制定了一些UILabels和UIImageViews。然后我想将这个自定义UIView的多个副本放到UIViewController中。如何创建自定义UIView?

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

回答

5

到目前为止,最简单的方法是创建一个文件所有者设置为NSObject的笔尖,其中包含一个包含布局元素的视图。

然后

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

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

2

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

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

然后你想要实例在您的视图控制器代码自定义视图每次拨打:

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

您添加的出口将被设置为指向您的自定义视图的新实例。

唯一的缺点这种方法的缺点是,你将不得不布置您的自定义视图的情况下,在您的视图控制器编程,而不是图形化界面生成器。

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

+0

我需要实现哪些方法才能将UI元素添加到自定义UIView中?它是' - (id)initWithCoder:(NSCoder *)解码器? – xmr 2010-08-07 06:23:55

+0

看到我的新答案,您可以省略掉插座并使用loadNibNamed返回的数组。 – mvds 2010-08-07 09:50:24

+0

@xmr:我认为只是普通的'init'。 – 2010-08-10 00:45:35

0

编辑:不幸的是在Xcode 4.0,除去这种能力。

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

然后,您可以图形化视图子类的多个实例添加到任意界面生成器视图或窗口,就像你使用内置在库中的对象。

+1

那里有过时的链接。 – Jonny 2013-04-30 08:08:46

+0

任何新的链接?对于这样一个有趣的事情 – 2014-05-01 14:10:04