2017-06-18 12 views
0

複数のフィールドを持つ異なるNSViewControllerがあります。 1つはNSDatePicker、もう1つはNSTextFieldを持つ などです。NSViewControllerのビューをNSView(NSScrollView)サブビューとして表示

例: CustomViewController

アイデアは、私は、特定のボタンをクリックしたときNSScrollViewでこれらを表示することです。

ScrollViewWithViews

は、だから私は、次の解決策を考え出した:[ ViewController] ViewController S(異なる入力を持つ)すべてのカスタムを保持している:

私の主なViewControllerクラスは、変数viewControlersを持っています。ボタンをクリックすると、特定の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 

私は入力を備えたViewControllerのすべてのカスタムに「近い()」機能をトリガーすることNSButtonを追加しました。そして、私は、「クローズ」機能のものViewControllerの上:

self.view.removeFromSuperview() 

それだけscrollViewからViewControllerのビューを削除しますが、ViewController自体は割り当て解除ではなく、それはviewControlers配列に残っているが(mainViewController内の変数)

私はデリゲートを作成することを考えていましたが、それらのビューのいずれかの閉じるボタンが押されるたびにデリゲートメソッドを呼び出しました。この場合、単に(すべてのカスタムのために)ViewControllerというデリゲートの配列を作成するだけです(作成された配列ViewControllerのすべてを参照する配列と並行して)。


は、今私が思うに、あなたは別のビュー内ViewController s’の見解を提示したいような状況に対処する一般的な方法があり、または誰もが、彼らがより良い好きなようにそれをしませんか?

+0

「scrollView.addSubview(dmyVC.view)」は、スクロールビューにビューを追加する方法ではありません。 – Willeke

+0

scrollViewは、あとでScrollViewのdocumentViewになる単なるNSViewです(mainScrollView.documentView = scrollView) – Alex

答えて

1

解決策A:代理人。すべてのView Controllerは、同じView Controller、メインView Controllerを持つことができます。終了ビューコントローラは、デリゲートメソッドのパラメータです。

解決策B:カスタム通知。メインビューコントローラは通知を監視します。終了ビューコントローラは、通知をポストし、通知のオブジェクトです。

+0

デリゲートメソッドのパラメータとしてのクローズドビューコントローラの考え方は、デリゲートの配列を持つよりもずっと優れています。 – Alex

関連する問題