Swift 显示NSViewController';s视图为NSView';s(滚动视图)子视图

Swift 显示NSViewController';s视图为NSView';s(滚动视图)子视图,swift,cocoa,swift3,nsview,nsviewcontroller,Swift,Cocoa,Swift3,Nsview,Nsviewcontroller,我有不同的NSViewControllers,它们有多个字段。其中一个是数据采集器, 另一个有NSTextField等等 例如: 这个想法是当我点击特定的按钮时,在NSScrollView中显示这些 所以我想出了下一个解决方案: 我的主ViewController类有一个变量viewControlers:[ViewController],它保存所有自定义的ViewControllers(具有不同的输入)。当我点击按钮时,我初始化某些视图控制器,然后将其视图添加到滚动视图中 例如: let d

我有不同的
NSViewController
s,它们有多个字段。其中一个是数据采集器, 另一个有NSTextField等等

例如:

这个想法是当我点击特定的按钮时,在NSScrollView中显示这些

所以我想出了下一个解决方案:

我的主
ViewController
类有一个变量viewControlers:[
ViewController
]
,它保存所有自定义的
ViewController
s(具有不同的输入)。当我点击按钮时,我初始化某些
视图控制器
,然后将其视图添加到滚动视图中

例如:

let dmyVC = storyBoard.instantiateController(withIdentifier: "DayMonthYearVC") as! DayMonthYearSelectVC
self.viewControlers.append(dmyVC) //add new vc to the array 
scrollView.addSubview(dmyVC.view) //add this VC’s view to a scroll view
我添加了
NSButton
,该按钮通过输入向每个自定义
ViewController
s触发“close()”函数。然后在“关闭”功能中的
ViewController
s上执行以下操作:

self.view.removeFromSuperview()
但是,它仅从scrollView中删除
ViewController
的视图,但
ViewController
本身未解除分配,它仍保留在ViewControllers数组中(mainViewController中的变量)

我正在考虑创建委托,并在每次按下其中一个视图上的“关闭”按钮时调用委托方法。在这种情况下,我只需要有一个委托数组(对于每个自定义的
ViewController
)[与保存对所有创建的
ViewController
的引用的数组平行]



现在我想,当您想在另一个视图中显示视图控制器视图时,或者每个人都以自己更喜欢的方式来显示视图控制器视图时,是否有一种常见的处理方法?

解决方案a:代理。所有视图控制器都可以具有相同的委托,即主视图控制器。关闭视图控制器是委托方法的一个参数


解决方案B:自定义通知。主视图控制器观察通知。关闭视图控制器发布通知,并且是通知的对象。

与问题无关,但是
scrollView.addSubview(dmyVC.view)
不是如何将视图添加到滚动视图中。scrollView只是一个NSView,后来成为scrollView的documentView(mainScrollView.documentView=scrollView)谢谢,将关闭视图控制器作为委托方法的参数的想法比拥有委托数组要好得多。