他のビューコントローラからアクセスできるようにUIViewインスタンスを何とか保存することはできますか?私はこれがおそらく彼らが悪いと言っている「グローバル」に接していることを知っていますが、私は逃げ出します。私が知っている限り、私はいくつかのUITabBarタブを持っているので、あるタブでインスタンス化されたビューの同じインスタンスを参照する必要があり、別のタブに再度表示する必要があります。そのようなことをするための最良のアプローチは何ですか?異なるUIViewControllerで同じUIViewインスタンスを表示
答えて
確かに。永続オブジェクトのUIView
オブジェクトへの保持された参照を格納するだけで済みます。たとえば、サブクラスUIApplicationDelegate
に保持されているプロパティを追加できます。そのデリゲートにビューをインスタンス化させることができます。すべてのコントローラは、ビューのアプリケーションデリゲートに問い合わせます。常に利用可能なルートビューコントローラがある場合は、そこに保持することができます。
多分あなたのアプリの全体的な構造を考えて、UIView
を格納する "正しい"場所を見つけるのを助けることができます。以下では、頻繁に使用するアプリの構造を紹介します。アプリの構造をアドバイスする必要はありませんが、アプリの最適な構造を考える際に役立つオプションを拡張するための例として示しています。
私はクライアントのためのアプリのような多くのパンフレットを書く。これらのアプリでは、多くのビューを提示する必要があります。それぞれのビューは、パンフレットのページにいくぶん類似しています。これらのビューの一部にはユーザーとのやりとりがあり、画面外では状態を保持する必要があります。また、状態データを他のビューと共有する必要があります。
これらのアプリケーションを管理するために、プレゼンテーションマネージャオブジェクトを作成します。このオブジェクトは、表示されていないときに持続しなければならないビューを含む、アプリケーションの全体的な状態を保持します。プレゼンテーションマネージャを所有する1つのマスタUIViewControllerを使用し、すべての共通ビューコントロール操作を行います。個々のビューの特定のロジックは、各ビューのUIViewサブクラスに入ります。これらの個々のビューは、プレゼンテーションマネージャーによって作成され、永続的なビューを含めて、マネージャーに知らせることができます。
ええ、私のアプリのように聞こえるのは、あなたのものとかなり似ています。スクリーンから離れたときの状態を保持します。 – purefusion
B/CあなたはUITabBarを使用しています。私はあなたのカスタムビューをアプリケーションデリゲートのウィンドウに追加することをお勧めします。次に、それを格納する必要はありません、それを隠すだけです。いずれかのNSNotificationCenterを使用して、通知を送信してビューを表示するか、appDelegateを呼び出してビューを手動で表示することができます。
あなたは、このようなビューコントローラに同じビューのインスタンスを注入するために、依存性注入を使用することができます。
UIView *myView = [UIView new];
UIViewController *controller1 = [UIViewController new];
UIViewController *controller2 = [UIViewController new];
controller1.view = myView;
controller2.view = myView;
[myView release];
@Abhinit:はい、私の答えを更新しました:) –
面白いです。このようなことは考えていませんでしたが、UITabBarControllerが上のコードを使用してインスタンス化するインスタンスとは独立して、各タブのビュー自体をインスタンス化するため、これはUITabBarビューでは機能しません。どのようにその問題を回避するためのアイデアですか? – purefusion
- 1. UIViewControllerなしでUIViewを表示
- 2. UIViewControllerにUIViewが表示されない
- 3. カスタムUIViewをUIViewControllerの上に表示
- 4. 複数のUIViewControllerサブクラスで同じUIViewサブクラスですか?
- 5. UIViewControllerのインスタンスごとに異なるURI
- 6. 異なるブラウザで同じブラウザが表示される
- 7. ブラウザ間で同じフォントの異なる表示
- 8. 同じ在庫パネルに異なるグラフを表示する(amCharts)
- 9. 2つの異なるインスタンスで同じ__vfptrが表示されるのはなぜですか?
- 10. Joomla 1.7 - 同じメニューを表示し、ゲストとメンバーに異なるコンテンツを表示
- 11. 同じ行に3つの異なる値を表示
- 12. UIPopoverControllerにUIViewControllerなしでUIViewを表示することはできますか?
- 13. 同じフラグメントの異なるインスタンス間で通信する
- 14. 異なるUIViewControllerサブクラスを渡す同じメソッドを使用できますか?
- 15. 1つのUIViewControllerで複数のUIViewを表示
- 16. JSON-LDの同じマークアップと異なるInline Microdataコンテンツの表示
- 17. 同じアンドロイドアクティビティの複数のインスタンス間でファイルを非表示
- 18. C#Dataset - 異なる日付で同じレコードを表示する方法
- 19. SQLクエリ - 異なる条件で同じ列を2回表示する
- 20. 別のビューを介してUIViewController/UIViewを表示
- 21. 同じUIViewControllerは2つの異なるソースからロードされていますが異なる結果で表示されます
- 22. iPhoneのpushViewController同じクラスの異なるインスタンス
- 23. 同じSWFの異なるインスタンス間のLocalConnection?
- 24. ハッシュセットとすべてのメンバーが同じクラスの異なるインスタンス
- 25. タイマーの異なる同じビューの複数のインスタンス
- 26. Android WindowManagerは、異なるデバイスで同じ画面サイズを表示します
- 27. 同じユーザーがSharePoint 2010の異なるサイトコレクションで異なる表示名を使用する
- 28. 同じCheckBoxですが、2つの異なるアンドロイドメカで異なる表示がありますか?
- 29. デザインレイアウトの表示が同じでない
- 30. SQL同じデータを表示するが、同じビュー内の異なる日付に基づくクエリ
質問のネーミングについてのヒントは、「異なるUIViewControllerで同じUIViewインスタンスを表示する」ように短くしてみてください – Cyprian
私はそれが悪いです!とにかく、私は今あなたの提案にそれを更新しました! :) (以前は「他のビューコントローラによって必要になったときに呼び出すことができるようにUIViewインスタンスを格納する」 – purefusion