我有一个(简化的)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。他们的东西类似于代码吗?
答案 0 :(得分:1)
两个观点根本没有相互引用。这并不能很好地扩展。这类似于UITableView总是引用UITextField。
您的观点应该只是展示内容。如果需要,您需要一个控制器,或者更具体地说是View Controller,让它们通过模型进行交互。
有很多方法可以做到这一点,但指导原则是它们是分离的。按钮会有一个动作。该操作可以在视图控制器上有一个目标方法,它可以触发NSNotification,... ViewController将处理这个,然后在另一个视图上对textfield执行某些操作。
也许按钮会更改模型中的某些数据,并且文本字段以某种方式通过它的控制器连接,以侦听模型的更改并通过模型显示数据。
让您的视图显示内容。不要在视图中放置Model内容。让控制器管理让您的视图进行通信的协调。