1

我有一个(简化的)Cocoa 视图层次结构,如下所示:

window
- contentView
-- view1
---> button1
--view2
---> textField1

重要的是,button1&textField1不共享直接的 superView。

我想添加一个目标操作button1来执行某些事情(不相关的确切内容)textField1(考虑textField1是我创建的一些自定义文本字段)。

据我了解,该按钮必须textField1在初始化时引用,以便您可以添加“目标操作”。

我的问题是 button1 以一种可以扩展到更复杂/更深/嵌套视图层次结构的方式获取此引用的最佳方式是什么

我希望寻找比以下更优雅的东西:

let reference = self.superview.subview[0].subview[0] as NSView

Interface Builder 允许您右键单击并从按钮拖动到 textField 以建立“连接”,并且它为此使用某种内部 ID。他们的事情是否类似于在代码中完成?

4

1 回答 1

1

这两个视图根本不会相互引用。这不能很好地扩展。这类似于 UITableView 总是具有对 UITextField 的引用。

您的视图应该只是显示内容。如果需要,您需要一个控制器,或者更具体地说是 View Controller 让它们通过模型进行交互。

有很多方法可以做到这一点,但指导原则是它们是解耦的。该按钮将有一个动作。该操作可能在视图控制器上有一个目标方法,它可以触发一个 NSNotification,...... ViewController 将处理这个,然后对另一个视图上的文本字段做一些事情。

也许按钮更改了模型中的一些数据,并且文本字段通过它的控制器以某种方式连接,以侦听模型的更改并通过模型显示数据。

只需保持视图显示内容即可。不要将模型的东西放在视图中。让控制器管理让您的视图通信的协调。

于 2014-12-10T10:48:19.607 回答