2010-09-03 92 views
5

如何查看IBOutletCollection的实际用法?不幸的是,Apple文档没有提供更广泛的用法思路,而是简要提及它。好吧,它保持与IB的一对多关系,但是如何有效地访问和使用特定对象?使用TagName?如何确保对象的顺序?实际使用IBOutletColletion

回答

5

我最近使用它来轻松初始化标签网格。我在视图上有一个n×n的标签矩阵,并单独引用每一个(通过IBOutlet)以显示相关数据。然而,当视图第一次加载时,我想控制所有标签中显示的默认文本。最初我想要一个短跑显示,但由于这是一个客户,我希望它很容易改变。视图内容随着时间的推移而不断变化,并且每个客户端请求都会不断变化

我创建了一个IBOutletCollection,并在4(@property,@synthesize和for循环)中完成了相同的结果,而不是编写N行代码。 YMMV,但我发现它在这种情况下非常有用。

0

在Interface Builder User Guide中再次阅读this section

IBOutletCollection s实际上只是NSArray s您可以连接到IB中的多个对象。你连接的所有对象最终都在这个数组中,并且可以像代码中的任何其他对象一样从代码中访问。

+0

:)现在,怎么看起来实际使用?你说过,我可以像任何其他数组中的任何其他对象一样访问每个对象。确实,但是这个数组是如何排序的?我应该在开始时自行排序吗?以及如何区分这个数组中的对象?有标签?如果是这样,我应该遍历整个数组来寻找我正在寻找的对象,或者最好用谓词搜索数组?等等...... – juckobee 2010-09-05 11:05:10

+1

如果你正在寻找特定的物体,你可能不应该使用这个。如果您想要遍历元素列表,请使用它。如果你需要区分它们,你可以使用'tag'属性,或者'target'和/或'action'。 – Sven 2010-09-05 11:17:16

+1

不幸的是,在运行时不会保留添加项目到集合的顺序。 – zubko 2011-04-30 11:34:16

0

我用它来最小化代码。我有一系列的UIViews应该对一些UIButtons(自定义模式)的“触及内部”事件做出反应。

我给所有的UIButtons一个标签(可以说1005到1010),并且所有的UIViews都与它们应该响应的UIButton具有相同的标签。

然后我将UIViews与Interface Builder中的集合连接起来。所有UIButton触摸事件都转到我的控制器中的相同功能。这个函数获取sender对象的标签,遍历NSArray列表(“IBOutletCollection(UIView)”)并比较标签。每次它命中,适当的行动就完成了。

这是一个遗憾,NSArrays似乎无法保存订单......这到底是什么苹果的文档中描述