在 Interface Builder 中,如何将 UIViews 添加到属于我创建的自定义视图的子视图?

Posted

技术标签:

【中文标题】在 Interface Builder 中,如何将 UIViews 添加到属于我创建的自定义视图的子视图?【英文标题】:In Interface Builder, how can I add UIViews to a subview that is a part of a custom view I've created? 【发布时间】:2012-06-26 01:43:31 【问题描述】:

我正在为我正在创建的 iPhone 应用程序创建自定义视图。这个自定义视图是一个弹出对话框,它由一个包含两个图像的 UIView、一个关闭对话框的按钮、一个标签和一个 UIScrollView 组成。这个视图被命名为 MDPopoverCard。我将这些文件作为我的视图的一部分:

MDPopoverCard.xib - The view as drawn up in Interface Builder.
MDPopoverCard.h - Defines a few IBActions and some other properties 
MDPopoverCard.m - Implements some functions defined in the header

这是 Interface Builder 中的样子:http://cl.ly/2B0f2x3s1w1i0K2G0Q1r(抱歉,我还不能发布图片,因为我是 *** 的新手)

在我的 .m 和 .h 文件中定义了一些属性来控制是否显示绿色按钮以及标题标签的文本是什么。

我需要在我的应用程序中显示一些这样的对话框,并且我想重用我设计的这个界面。我希望能够通过 Interface Builder 将按钮和其他表单元素添加到 UIScrollView 中。但是,我有一个问题:

想象一下,我在 Interface Builder 中绘制了另一个视图。我向它添加了一个 UIView 并将其类设置为 MDPopoverCard。然后我将几个 UIButton 对象拖到我的 MDPopoverCard 视图中。这是 Interface Builder 中的示例:

http://cl.ly/1X090h1t1q3f0i3E0917

此屏幕截图显示了我已将 MDPopoverCard 添加到的另一个视图(根视图)。然后我添加了两个按钮作为 MDPopoverCard 的子视图。

这些按钮确实可以正确嵌套在 Interface Builder 中。但是,当我运行我的应用程序时,这些按钮会添加到 任何构成 xib 文件中我的 MDPopoverCard 视图的项目之前。这意味着按钮被添加到我的弹出对话框后面。这是第一个问题。

第二个问题是我希望将这些按钮和表单元素实际添加到包含在 MDPopoverCard 视图中的 UIScrollView 中,而不是直接添加到 UIView 的子视图数组中。有没有办法在 Interface Builder 中指定这个?我真的更愿意在我的 UIView 中绘制按钮并通过 Interface Builder 将它们连接到 IBActions,而不是手写我可能需要显示的这些对话框的每个实例(几个)。

有什么建议吗?我能做些什么来澄清这个问题吗?

感谢您的帮助!

【问题讨论】:

【参考方案1】:

以前 Xcode 支持用于自定义 UI 元素的用户定义 IB 插件,您可以像使用内置小部件一样将其拖放到 XIB 中。从 Xcode 4 开始,这个不错的功能已被删除。 (非常感谢,Apple。)

目前我只能想到一种 hacky 方法来实现您所描述的。我要做的是:

    在您的MDPopoverCard 上创建一个IBOutletCollection,例如embeddedControls 将它与您想要进入滚动视图的每个 UI 元素(此处为按钮)链接 在MDPopoverCard 中实现awakeFromNib 并将embeddedControls 中所有视图的超级视图显式重置为其中的滚动视图

希望这会有所帮助(虽然我还没有尝试过)。

【讨论】:

非常感谢,这就像一个小小的调整的魅力。我所做的是:1)向 MDPopoverCard UIView *viewToScroll 添加一个属性。而不是必须链接每个 UI 元素,我现在只需链接一个。 2) 将此属性链接到我在 IB 中绘制到我的 MDPopoverCard 中的 UIView。 3) 实现 awakeFromNib 并告诉滚动视图添加一个子视图,即 viewToScroll。奇迹般有效!现在我需要做的就是让它正确调整视图大小并为滚动条设置滚动框架,我很高兴。非常感谢您的帮助!

以上是关于在 Interface Builder 中,如何将 UIViews 添加到属于我创建的自定义视图的子视图?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Interface Builder 预览故事板中显示导航栏(助理编辑器)

如何在 Interface Builder 中获取 iPhone,而不是 iPad 视图

如何在 Interface Builder 中存储键/值并在运行时访问它们?

如何解决 Interface Builder Xcode 中的 stackview 错误问题?

如何将自定义 UIButton 添加到 Interface Builder 对象库?

如何将 UITableViewCell 的内容视图转换为 Interface Builder 中的普通 UIView?