【发布时间】:2011-05-01 11:40:38
【问题描述】:
我想为 iPhone 创建一个可重用的组件(自定义控件)。它由预先安排在视图上的几个标准控件和一些相关代码组成。我的目标是:
- 我希望能够使用 Interface Builder 在我的自定义控件中布置子视图;
- 我想以某种方式将整个东西打包,这样我就可以相当轻松地将生成的自定义组件拖放到其他视图中,而无需手动重新连接一堆插座等等。 (一点点手动重新布线就可以了,我只是不想做大量的工作。)
让我更具体一些,具体告诉你我的控件应该做什么。在我的应用程序中,有时我需要访问 Web 服务来验证用户输入的数据。在等待来自 Web 服务的回复时,我想显示一个微调器(一个活动指示器)。如果 Web 服务回复成功代码,我想显示“成功”复选标记。如果 Web 服务回复错误代码,我想显示错误图标和错误消息。
实现这一点的一次性方法非常简单:我只需创建一个 UIView,其中包含一个 UIActivityIndicatorView、两个 UIImage(一个用于成功图标,一个用于错误图标)和一个用于错误消息的 UILabel。这是一个屏幕截图,相关部分用红色标记:
然后我将这些部件连接到插座,并在我的控制器中放入一些代码。
但是我如何打包这些部分——代码和少量视图集合——以便我可以重用它们?以下是我发现的一些事情,让我成功了,但不是那么好:
- 我可以将视图和控件的集合拖到库的自定义对象部分;然后,稍后,我可以将它们拖回其他视图。但是(a)它忘记了哪些图像与两个 UIImage 相关联,(b)有很多手动重新布线四个或五个插座,以及(c)最重要的是,这并没有带来代码。 (也许有一种简单的方法来连接代码?)
- 我想我可以创建一个 IBP 插件;不确定这是否会有所帮助,而且这似乎需要做很多工作,而且我也不完全清楚 IBPlugins 是否适用于 iPhone 开发。
- 我想,“嗯,有与此相关的代码——闻起来像一个控制器,”所以我尝试创建一个带有相关 XIB 文件的自定义控制器(例如
WebServiceValidatorController)。这实际上感觉很有希望,但那时我不知道如何在 Interface Builder 中将此组件拖到其他视图上。WebServiceValidatorController是控制器,而不是视图,因此我可以将其拖到文档窗口中,但不能拖到视图中。
我感觉我错过了一些明显的东西......
【问题讨论】:
-
我发现这个链接提供了一些很好的信息:bartlettpublishing.com/site/bartpub/blog/3/entry/327
标签: iphone xcode interface-builder