0

これは非常に基本的な質問かもしれませんが、私はまだ答えを見つけることができませんでした。アプリのメニューとして機能するUITableViewがあります。テーブルビューの各行を選択すると、UIViewControllerの異なるサブクラスが開きます。

現時点では、私のコードはAppleのUICatlogの例で使用されているのと同じように機能します。メインビューコントローラ(テーブルビュー)では、各メニュー項目は配列(menuList)のディクショナリに記述されます。各ディクショナリには、その画面のUIViewControllerサブクラスのインスタンスと、メニュー項目に関するその他のデータが含まれています。ユーザーが行を選択すると、didSelectRow atIndexPathが起動し、menuList配列のそのindexPath.rowにあるディクショナリに格納されている適切なビューコントローラを呼び出します。

テーブルビューが最初にロードされるときに、すべての単一のビューコントローラを割り当てて初期化するのは非常に無駄なようです。

私の質問は次のとおりです。関連する行がタップされた場合にのみビューコントローラのサブレーザーを割り当て/初期化するために、UICatalogで示されている方法よりも優れた方法はありますか?(didSelectRowで複雑なif..else構造を使用できることはわかっていますが、これにより、didSelectRowメソッドが非常に長くなり、カプセル化が中断されます。これを行うためのよりクリーンな方法があり、適切なViewControllerベースを割り当てて初期化できるかどうか疑問に思います。辞書からのデータについて)

4

3 に答える 3

0

user1349768はストーリーボードを使おうとしますが、この機能はiOS4以降でのみ機能します。

于 2012-10-21T18:45:59.303 に答える
0

単なる提案...各View Controllerへの参照をNSArrayに入れ、行がタップされたときにそれらを開始してセグエします(そしてobjectAtIndexから参照を取得するだけです:)。

于 2012-10-21T19:02:51.237 に答える
0

これを行うためのより良い方法は見つかりませんでしたが、割り当てられた各ビュー コントローラーのメモリ シグネチャはわずか 288 バイトです。Apple によって提案されたソリューションは、switch case ステートメントを使用するよりもはるかにエレガントでスケーラブルであるため、そのまま残しました。

于 2012-10-29T19:06:41.013 に答える