将 NSViewController 的视图显示为 NSView 的(NSScrollView)子视图

Display NSViewController's view as NSView's (NSScrollView) subview

我有不同的 NSViewController 具有多个字段。一个有 NSDatePicker, 另一个有 NSTextField 等等。

例子:

我的想法是在我单击特定按钮时在 NSScrollView 中显示这些内容。

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

我的主要 ViewController class 有一个变量 viewControlers: [ViewController] 包含所有自定义 ViewControllers (具有不同的输入)。当我点击按钮时,我初始化某些 ViewController,然后将它的视图添加到滚动视图。

示例:

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 触发“close()”功能到每个自定义 ViewControllers 与输入。然后在“关闭”功能中的那些 ViewControllers 我做:

self.view.removeFromSuperview()

然而,它只是从 scrollView 中删除了 ViewController 的视图,但是 ViewController 本身并没有被释放,而是保留在 viewControlers 数组中(mainViewController 内的变量)

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


现在我想,当您想在另一个视图中呈现 ViewController 的视图,或者每个人都以他们更喜欢的方式呈现时,是否有一种通用的处理方式?

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

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