質問: 複数のコントローラー間で「静的」ビューを維持するための正しい設計上の選択? まず、正しいstack exchangeコミュニティ内でこれを質問しているかどうかわからないので、この質問が別の場所にある場合は、お知らせください。 stackoverflowには適切ではないようです。ナビゲーションコントローラーを使用して2つのtableviewcontroller間を移動するios用のオーディオブックアプリを開発しています。最初のビューコントローラーは選択可能な本のリストを保持し、2番目のビューコントローラーはそれらの本の章のリストを保持します。ユーザーがチャプター行の再生ボタンをクリックすると、そのチャプターのオーディオの再生が開始されます。各ビューコントローラーの下部に、標準のオーディオプレーヤーのコンポーネント(再生/一時停止ボタン、トラックスライダー、継続時間、現在のトラック再生のラベル)を保持するカスタムビューを作成しました。 各ビューコントローラには、オーディオプレーヤービューの独自のインスタンスがあります。共有されたグローバルオーディオプレーヤービューはありません(iosでこれを行うことさえできないと思いますか?)。両方のコントローラーの下部にあるオーディオプレーヤーの状態で、ユーザーがアプリ内を移動するときに共有状態を維持したいと思います。たとえば、ユーザーは第1章の行を再生します。第1章のエントリが再生されていることを表示するには、各コントローラーの下部にあるオーディオプレーヤービューが必要です。どうすればこれを達成できますか?私はios開発にかなり慣れていませんが、オーディオプレーヤービューのデリゲートプロトコルを定義し、各ビューコントローラーに実装させる必要があると思いますか?または、オーディオプレーヤーを実装するためのより良い方法はありますか。たぶんカスタムuitoolbarを作成しますか?
回答: 私が知る限り、これは質問するのに良い場所です。まず、暗黙の質問を明確にしましょう。共有オーディオプレーヤービューを持つことはかなり可能です。これを行うには、uinavigationcontrollerとプレーヤーコントロールを含むビューを保持するカスタムコンテナビューコントローラーを作成します。 uinavigationcontrollerをサブクラス化して、プレーヤービューをそのビューに直接配置することも可能かもしれません。上記のアイデアのいずれかを実行すると、この特殊なケースで問題は解決しますが、質問するのは良い質問です。キャリアのある時点で、複数のview controller間で状態を共有する必要があり、その方法を知っていることが重要だと思います。あなたの経験によっては、私があなたの質問を「共有状態」の1つとして表現したという事実だけで、あなた自身の答えを生成するように促されたかもしれません。そうでない場合は、以下を読み続ける前に、それについて考えることをお勧めします。ビューコントローラ間で状態を共有する最も簡単な方法は、それらのビューコントローラ間で状態を含むオブジェクトを文字通り共有することです。より良い方法は、モデルのサブジェクトにオブザーバーパターンを設定し、両方のビューコントローラーをオブザーバーとしてモデルにアタッチすることです。モデルの状態が変わると、view controllerに通知され、それに応じてビューの状態を更新できます。