如何创建自定义 UIView?

Posted

技术标签:

【中文标题】如何创建自定义 UIView?【英文标题】:How to create a custom UIView? 【发布时间】:2010-08-06 22:59:13 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

目前最简单的方法是创建一个将 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];

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

【讨论】:

【参考方案2】:

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

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

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

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

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

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

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

【讨论】:

我需要实现什么方法来将 UI 元素添加到自定义 UIView?是- (id)initWithCoder:(NSCoder *)decoder吗? 查看我的新答案,您可以省略插座摆弄并使用 loadNibNamed 返回的数组。 @xmr:我认为只是普通的旧init 如果您想在 nib 加载时以编程方式添加元素,请使用 awakeFromNib。【参考方案3】:

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

在 Interface Builder 中配置好子视图后,您可以创建一个新组(使用库窗口底部的 cog 按钮)并从列表视图(即不是布局视图)回到库窗口。

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

【讨论】:

任何新链接?对于这么有趣的事情

以上是关于如何创建自定义 UIView?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIView 创建自定义翻转动画

如何从 UIBezierPath 创建 IBDesignable 自定义 UIView?

使用 XIB 创建自定义 UIView

创建自定义模糊 UIView

如何在 Xcode 中创建自定义 UIView?

将自定义键盘嵌入uiview