繁体   English   中英

如何在没有相同数量的属性或出口的情况下访问许多Cocoa控件?

[英]How can I access many Cocoa controls without the same number of properties or outlets?

我正在构建一个主从应用程序,其中的详细信息视图可能包含近100个字段。 模型对象使用外部库来访问文件中的元数据,并且不需要100个属性。 数据从文件中检索并由结构表示。 这些字段由枚举标识,并使用Find(Enum)方法或lib提供的迭代器进行访问,该迭代器对元数据中存在的所有字段进行迭代。

我想利用库中的Enum / Find / iterator,而不必使用带有getter / setter的100个属性以及UI中文本字段和其他控件的100个出口。

与我在使用该库的程序中看到的方法类似,我想基于元数据的枚举FieldId使用switch()实现一个getter和一个setter。 在getter和setter中,我想以编程方式访问UI中适当的文本字段或其他控件,以根据需要获取或设置值。

当用户在主视图中选择文件时,getter将遍历所有详细信息字段并显示关联的元数据字段的值。 当用户保存文件时,我需要遍历更改的字段,并使用适当的FieldId枚举调用setter。

我是Cocoa / Obj-C的新手,我能想到的只是绑定-但是我可以将字段绑定到方法吗? 我可以使用绑定将适当的元数据FieldId传递给getter / setter吗?

在这种情况下,实际上拥有100个网点是否合适? 我是否应该考虑将字段/出口按逻辑分组并划分为几个类的替代程序架构?

如果你想通过的若干意见类型相同(或具有相同的基本类型的公司,比如,能够遍历UIControl ),您可以使用IBOutletCollection和迭代对单NSArray提供。 另外,如果你在召唤从码100场(这实际上使更多的意义),你为什么不只是把自己的意见,为NSMutableArrayNSMutableDictionary ,并让他们通过这些访问? 更妙的是,如果字段应该出现在同一个容器视图,它足以问其子视图与myContainerView.subviews得到一个数组。

考虑制作一个矩阵 它是一种单独的控件,提供了单个单元格的二维矩阵。 文本字段单元格可能是最常见的。

要在笔尖编辑器中创建矩阵,请从单个文本字段开始。 然后,按住选项并调整其大小。 Xcode会将其转换为文本字段单元的矩阵; 您可以通过拖动来确定每个维度中有多少个。

一旦有了矩阵并连接了插座,就可以通过x和y索引要求它提供单元格,然后可以像处理独立字段一样对这些单元格进行操作。

如后续问题之一所述, 如何绑定可可中NSDictionary子词典的值? ,我最终将元数据预加载到一组嵌套数据结构中。

然后,我在每个字段中使用绑定来访问/显示适当的元数据。 如果修改了元数据(例如,通过在文本字段中编辑其值),我将拥有一种使用外部库的API处理修改后的数据结构的方法。

最初让我问这个问题的是我想直接使用内部API的内部数据结构或方法来获取或设置每个文件中的数据。 我从错误的角度看待事物-以编程方式访问GUI中的字段,而不是将GUI绑定到应用程序中的数据。 我应该更了解:)

感谢您的建议。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM