1

「新聞」(モデル)インスタンスの詳細を表示する画面があります。画面のViewControllerには、この新聞モデルのプロパティが1つあります。NewspaperインスタンスにはいくつかのArticleインスタンスが含まれており、これらのArticleインスタンスは画面でUIButtonとして表す必要があります。UIButtonをタップすると、記事のタイトルを含むアラートメッセージが表示される必要があります。

UIButtonをArticleモデルに関連付ける良い方法は何ですか?基本的に、UIButtonをタップするときに、UIButtonの対応するArticleインスタンスを取得するにはどうすればよいですか?

私は現在、2つのアプローチを念頭に置いています。

  1. UIButtonをオーバーライドし、Articleインスタンスのプロパティを追加します。
    • ビュー(UIButton)にはモデル(Article)との直接通信手段があるため、これはMVCモデルに違反しますが、UIButtonはそのプロパティを呼び出すだけで、どのArticleインスタンスを使用して、アクション(記事のタイトルを含むアラートメッセージを表示します)。
  2. UIButtonのNSArray(buttonsArray)とArticleインスタンスのNSArray(articlesArray)を作成します。
    • buttonArrayのインデックス0は、articlesArrayのインデックス0に対応します。タップされたUIButtonに関連付けられたArticleインスタンスは、配列内のボタンの位置に基づきます。UIButtonの対応するArticleを取得するには、タップされたUIButtonが見つかるまでbuttonsArrayをループし、同じインデックスを使用してarticlesArrayからArticleを取得する必要があります。

これを達成するためのより良い方法はありますか?

編集:ボタンにはアニメーションとジェスチャー認識機能があります。また、Articleモデルのボタンアクションに必要な情報には、タイトルだけではありません(たとえば、記事の位置、または別の画面に渡される場合はオブジェクト自体など)。

4

4 に答える 4

1

2番目のアプローチを使用することもできますが、2つのアレイの代わりにNSDictionaryを使用してください。

または、最初のアプローチを使用することもできますが、記事インスタンスのプロパティを追加する代わりに、「additionalTitle」やsthなどの一般的な文字列プロパティを追加するだけです。そうすれば、ボタンクラスとモデルクラスの間に直接の依存関係を作成する必要がありません。次に、アラートビューのタイトルをこのプロパティに保存できます。

于 2012-10-23T07:51:39.567 に答える
0

UITableViewとにかく、UIButtonが統合されているCellsでを使用したいですか?

このアプローチを採用する場合は、2番目のアプローチを使用できるためです。すべての記事を格納する配列を使用し、テーブルセルのタップされたインデックスを取得して、配列から記事を読み込みます。UIButtonを含むCustomCellを作成できます。ボタンは、どの記事が彼の下にあるかを知る必要さえありません。クリックされたインデックスでそれを処理するそのテーブルビュー。

Iを使用したくない場合はUITableView 、2番目のアプローチを選択します。

于 2012-10-23T07:49:40.673 に答える
0

AppleがiOSで一般的に使用しているアプローチは、モデル(ビューとコントローラー)を組み合わせたものに似ていると思います。たとえば、UIViewControllerUITableViewControllerは、単一のエンティティとして結合されたビューとコントローラの例です。これを考慮すると、モデル値をUIButtonサブクラスの一部として格納することは、モデルとビューの間で値を渡すように機能する限り、MVCについてはあまり違反しません。完璧なMVCではないかもしれませんが、それは開発者がその方法に従うかどうかを決定する必要があるものです。したがって、最初のアプローチはかなりきれいに見え、読みやすさと保守性を確保するため、最初のアプローチをお勧めします。

于 2012-10-23T07:57:42.650 に答える
0

UIButtonには、整数である設定可能なタグプロパティがあります。タグプロパティは、配列へのインデックスと簡単に一致させることができます。したがって、タッチイベントを受信すると、タグ値を引き出して、どの記事がタップされたかがわかります。

于 2012-10-23T11:19:06.283 に答える