2017-06-18 80 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