2010-08-16 126 views
1

我正在研究一个Cocoa应用程序,该应用程序需要多个滑块来控制数个“通道”数据的值。我想创建应用程序,以便所有通道数据都以整数形式存储在单个数组中。然后每个滑块将绑定到数组中的单个元素。这可能吗?如果是这样,我需要使用一个NSMutableArray或我可以逃脱一个标准的C数组?可可绑定:将NSSlider绑定到数组中的单个值

回答

1

你应该用Cocoa Bindings Programming Topics Guide花几个小时。最好的方法是使用中间控制器(如NSObjectController,NSArrayController,NSDictionaryController或NSTreeController)。

然后考虑:您是否总是有固定数量的频道,或者您是否需要在运行时添加/删除频道?

因为你没有包含任何关于频道的描述,你如何定义它(你自己的类或者像字典这样的基本的可可容器)或者它将如何使用,或者你想添加/动态删除频道,我能给你的最好的例子就是最基本的例子。

简单的例子

在最简单的情况下,(你有固定的渠道和渠道无非是一些“foo”值的容器更多),使用NSDictionaryController并勾选“准备内容”框(创建自己的字典进行存储)。你将把一个NSDictionaryController拖到你的IB XIB中。对此,您将为这些“频道”中的每一个添加诸如“channelAFoo”,“channelBFoo”等的键。

为每个通道添加一个滑块。将其绑定到与“选择”(缺省值)和“channelAFoo”的模型关键路径的用于信道的滑块,“channelBFoo”为信道B滑块控制器密钥字典控制器等

更多复杂的情况

一个更复杂的情况下会涉及一些可变数组(如您怀疑的)和一个带有该可变数组的NSArrayController作为其内容。您可以使用一个集合视图(NSCollectionView/Item),其中您的NSCollectionViewItem原型包含滑块(也可以是漂亮的通道名称,颜色代码等等)。当通道被添加到集合中或从集合中移除时(通过数组控制器进行通道以便记录更改),将为该通道创建(或移除)原型的副本,并将其控件绑定到其RepresentObject的某个键路径您的“频道”对象的一个​​实例)。

结论

如果你想更具体的建议,你必须是一个很多关于你的设计和意图更加具体。请记住,这是一种先进的Cocoa技术,您应该计划花费大量时间阅读文档,以便了解Bindings的工作原理。这将帮助你将问题分解成更小,更具体的问题(所以答案可以更合理地集中)。

+0

转述了这个结论,这听起来是无意识的说教。 :-) – 2010-08-17 14:39:14

+0

感谢您的建议。我正在创建一个与我正在设计的硬件控制器接口的照明控制应用程序。程序中的每个通道控制某个灯光的亮度。我决定采用更复杂的案例,因为我喜欢它提供的灵活性,似乎可以更容易地引用各个渠道(可能有不少)。刚刚计算出整个CollectionView昨晚。现在是时候了解其他细节。 – 2010-08-17 15:59:01

+0

@詹姆斯,你看看http://www.usbdmx.com/我有一段时间没有真正看过它,但曾经有一段时间,我正在帮助开发照明控制应用程序的开源框架(我放弃了对我几年前的尝试)。 – theMikeSwan 2010-08-25 21:42:15

相关问题