如何以编程方式从视图层次结构中引用另一个子视图?

时间:2014-12-10 08:49:48

标签: objective-c cocoa swift nsview target-action

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

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

重要的是,button1& textField1不要立即分享超级视图。

我想向button1添加一个目标操作,以便在textField1上执行某些操作(与确切的相关)(考虑textField1是我创建的一些自定义文本字段)。

根据我的理解,该按钮必须在初始化时引用textField1,以便您可以添加“target-action”。

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

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

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

Interface Builder允许您右键单击并从按钮拖动到textField以建立“连接”,并为此使用某种内部ID。他们的东西类似于代码吗?

1 个答案:

答案 0 :(得分:1)

两个观点根本没有相互引用。这并不能很好地扩展。这类似于UITableView总是引用UITextField。

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

有很多方法可以做到这一点,但指导原则是它们是分离的。按钮会有一个动作。该操作可以在视图控制器上有一个目标方法,它可以触发NSNotification,... ViewController将处理这个,然后在另一个视图上对textfield执行某些操作。

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

让您的视图显示内容。不要在视图中放置Model内容。让控制器管理让您的视图进行通信的协调。