複数のタブを持つタブビューを作成するための推奨される方法は何ですか。すべてのビューに単一のXIBファイルを使用する必要がありますか、それともビューごとに異なるXIBを使用する必要がありますか?私の好みは、タブビューのビューごとに複数のコントローラーを使用することです。したがって、異なるxibファイルを使用します。どうすればそれを達成できますか?タブビューごとに1つのxibファイルに複数のビューを含めることは可能ですか?それぞれに異なるコントローラーがありますか?
2 に答える
タブは常に同じですか、それとも動的ですか?それらが常に同じである場合、それが簡単であるという理由だけで、私は単一のxibファイルを使用する傾向があります。複数のコントローラーオブジェクトを引き続き使用できます。それらをのサブクラスにNSObject
して、すべてを同じxibにドロップするだけです。
タブビューでsを使用する簡単な方法があるかどうかを確認するために、簡単なGoogleを実行しましたが、このスレッドNSViewController
を見つけました。これには、それらを使用する方法のサンプルコードが含まれています。これにより、タブごとに個別のコントローラークラスとxibが提供されます。明らかに、私はそのコードを試したことがないので、それを保証することはできませんが、それは十分なスタートであるかもしれません。(そのサンプルコードでは、タブを切り替えるたびに新しいView Controllerがインスタンス化されますが、これはおそらくあなたが望むものではありません。私であれば、タブが最初にスワップされたときにインスタンス化してから、保持します。ウィンドウコントローラの辞書で、その後のスイッチで、すでに存在するそれぞれのビューコントローラを引き出します。)
最適なアプローチは、タブの複雑さによって異なります。ただし、複数のビューを追加すると、XIB はすぐに乱雑になります。また、コントローラーが肥大化するリスクもあります。
最良のアプローチは、タブごとにビューとコントローラーを用意することです。これにより、アプリへの将来の拡張機能の実装がはるかに簡単になります。
タブ ビューを保持するビュー (またはウィンドウ) を処理するメイン コントローラー (ウィンドウまたはビュー) があります。NSTabView
このコントローラは、 ( を参照)のデリゲートとして機能しますNSTabViewDelegate
。
コントローラーがメッセージを受信したら、tabView:didSelectTabViewItem:
その特定のタブを管理するサブコントローラーを作成できます。このコントローラーは、関連付けられたビュー ( initWithNib
) をインスタンス化し、それをビュー階層に追加します。タブ ビューのタブごとにこのプロセスを繰り返すことができます。メイン (最上位) コントローラが各サブ コントローラのリストを保持するように設定できるため、サブ コントローラを 1 回だけ作成する必要があります。