2017-06-18 204 views
0

我有不同的NSViewController s有多个字段。一个有NSDatePicker, 另一个有NSTextField等等。显示NSViewController的视图为NSView的(NSScrollView)子视图

实施例: CustomViewController

的想法是显示这些在NSScrollView当我点击特定按钮。

ScrollViewWithViews

于是我想出了一个解决方案:

我的主要ViewController类具有可变viewControlers:ViewController]保存所有自定义ViewController S(与不同的输入)。当我点击按钮时,我初始化某个ViewController,然后将其视图添加到滚动视图中。

Examle:

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的输入。然后在这些ViewController S IN“关闭”功能,我做的:

self.view.removeFromSuperview() 

然而,它不仅能消除从滚动型ViewController的看法,但ViewController本身不释放,它仍然在viewControlers阵列(在mainViewController中的变量)

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


现在,我想,有没有处理的时候,你想提出另一种观点认为内ViewController s’的观点,或者每个人都能在自己喜欢更好的办法的情况下的一种常见的方式?

+0

不相关的问题,但'scrollView.addSubview(dmyVC.view)'不是如何添加视图到滚动视图。 – Willeke

+0

scrollView只是一个NSView,后来成为ScrollView的documentView(mainScrollView.documentView = scrollView) – Alex

回答

1

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

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

+0

谢谢,关闭视图控制器作为委托方法的参数的想法比拥有一个委托数组要好得多。 – Alex