在界面生成器中,如何将 UIViews 添加到作为我创建的自定义视图一部分的子视图?



我正在努力为我正在创建的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

这是它在界面生成器中的样子:http://cl.ly/2B0f2x3s1w1i0K2G0Q1r(抱歉,我还不能发布图像,因为我是堆栈溢出的新手)

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

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

想象一下,我正在界面生成器中绘制另一个视图。 我给它添加一个UIView,并将其类设置为MDPopoverCard。 然后,我将几个 UIButton 对象拖到我的 MDPopoverCard 视图中。下面是它在界面生成器中的外观示例:

http://cl.ly/1X090h1t1q3f0i3E0917

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

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

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

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

感谢您的帮助!

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

目前,我只能想到一种黑客的方式来实现您所描述的内容。我要做的是:

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

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

最新更新