0

いくつかのラベル、テーブルビュー、およびその他のいくつかのビットを含むUIViewサブクラスがあります。現在、テーブルビューのデリゲートおよびデータソースであり、多くのUIアクションを管理しますが、いずれもデータに依存していません。たとえば、「編集」ボタンを押すと、コントロールを更新する方法はわかりますが、「保存」を押すと、コントロールを前の状態に戻す以外に何もしません。これはすべてコードで行われ、このアプリケーションではIBをまったく使用していません。

私は今、それが引き起こす可能性のあるすべてのデータモデルの変更を詳しく説明したいと思います。しかし、これらを新しいコントローラークラスに入れたいと思います。これは、MVCに準拠した方法だと思います。どうやってそこに着くのかわかりません。

まず、カスタムコントローラークラスを作成する必要があります。ビューコントローラがそれらにアクセスできるように、UIViewサブクラスからいくつかのコントロールを公開する必要がありますか?たとえば、ビューのテキストフィールドの読み取りと書き込みが必要になるので、これにゲッター/セッターを提供する必要がありますか?

次に、テーブルビュー-UIViewがデリゲートである代わりに、これも公開して、ビューコントローラをデリゲートにする必要がありますか?つまり、view.tableView.delegate = UIViewControllerからの自己?

そして最後に、別のビューからビューを起動するにはどうすればよいですか?具体的には、これは天気アプリに似たページスクロールビューアプリケーションであるため、単一のページスクロールビューを指定し、ページごとに1つずつ複数のカスタムUIViewを追加するmainViewUIViewがあります。[scrollView addSubview:myCustomView]を置き換えて、代わりにviewControllerを追加するにはどうすればよいですか?また、ビューをコントローラーに接続するにはどうすればよいですか。その逆も同様です。

私はこれまでIBなしでこれらすべてを試したことがないので、助けてくれてありがとう。

4

1 に答える 1

0

あなたの質問は非常に広く、答えの一部はあなたがあなたのソリューションをどのようにコーディングするかに依存するでしょう。私は私のために働くもののいくつかのヒントで返信しようとします:

ビュー:一般的な経験則として、ビューオブジェクトは非常に一般的なものである必要があり、それ自体の階層外の他のビューについては何も知らないことに注意してください。そのため、ビューは他のビューとの特定の相互作用に依存するのではなく、必要に応じてコールバック、プロトコル、ブロックなどを介してそのデリゲート/所有者/作成者に通信する必要があります。

ビューコントローラ:異なる階層の2つのビューを相互作用させる必要があるときはいつでも、ビューコントローラを介してその相互作用を処理することに固執することをお勧めします。そうすることで、別の画面では役に立たないコードによってビューが汚染されないようにすることができます。

また、iOS用のUIViewControllerは、単一のビューのコントローラーとして機能するのではなく、完全な表示ビュー階層を処理するために使用するクラスであることを意図していることにも注意してください。そのため、ビューごとにコントローラーを用意するのではなく、すべてを処理するために1つのコントローラーを用意することをお勧めします。

ビュー要素の公開:UIViewがヘッダーファイルでパブリックとして公開する量は、実装によって異なります。ビューの外観を処理し、汎用的で再利用可能であり、ビューのツリーの範囲外から何も必要としないメソッドは、実装に含めてヘッダーファイルに公開する必要があります。 。

外部の誰かがアクセスする必要がある可能性が非常に高いと思われる物件についても同じことが言えます。

提案:本当に必要なものだけを公開してください。通常、新しいメソッドとプロパティを公開する方が、後で削除するよりも簡単です。

于 2012-05-28T22:26:34.567 に答える