2

「トムとジェリー」、「ライオン キング」などの多数の UIButtons を含むビューがあります。ビュー コントローラーでそれらすべてが同じアクションを呼び出し、異なるボタンを区別してボタンを取得する必要があります。特定の NSString (たとえば、"TomJerry"、"LionKing" などの識別子)。

アイデア:

  1. 不正使用ボタンのタイトル テキスト プロパティ(カスタム ボタン スタイル、クリア テキスト色)。
    • 機能しますが、汚い感じがします... (ボタンがテキストを表示する必要がない場合にのみ機能します。)
  2. 追加の ivar + プロパティ「context」で UIButton をサブクラス化します。
    • プログラムでボタンを追加するのに最適です。
    • しかし、私のビューは Nib から読み込まれるので、すべてのボタンにアウトレットを定義する必要があります (そして、そのコンテキスト プロパティを awakeFromNib または viewDidLoad に設定します)。ブレ…</li>
  3. 「-(NSString*)context」メソッドの実装が異なる ボタンごとにサブクラスを作成します。
    • うーん…マジ?;-)
  4. タグを使用してボタンを識別し、タグをボタン固有の文字列にマッピングするための辞書を使用します。
    • DRY 違反: タグは、ボタンを識別するための Nib と、対応する文字列を取得するための辞書で、2 回認識/指定する必要があります。
    • これまでタグの使用を避けてきました。始める良い機会になるのではないでしょうか?

これを達成するにはどうすればよいですか?アイデア、ベストプラクティス、実装パターンはありますか?


更新:最初の回答を読んだ後 (ありがとう!)、明確にするためにいくつかのポイントを追加する必要があると思います。

上記のアプローチはすべて機能するはずです。ポイントは、私はそれらのどれも特に好きではないということです。どのアプローチを好むか (およびその理由)、または他のより良いアプローチがあるかどうかを尋ねています。

さらなる「要件」:

  • 各ボタンをコンセントとして接続したくありません。
  • ボタン固有の文字列を一般的な方法で取得したい、つまり、アクション送信者のスイッチをオンにしないif (sender==self.button1) {…} else if (sender==self.button2) {…}
4

3 に答える 3

2

追加
オプションは、タグに基づいて NSString を返すメソッドを追加する UIButton のカテゴリを作成することです。タグの潜在的な問題はまだありますが、実際のタグと概念的なタグから文字列への変換はすべて 1 か所で行われます。

私はこれがあなたの元の要件とさらなる要件を満たしていると信じています.


以前
のタグは高速で軽量で、2 つの整数を比較していました。

物事を明確に区別する番号付けスキームを簡単に作成できます: 1000-1999 はこのタイプのもの、1000-1099 はこのサブグループ、1015 はインスタンスなどです。

数値比較が利用可能です: x.tag > 10000 これを行います。

ただし、明らかに、それは追跡する必要があり、コードの解析が困難になる可能性があることを意味します。それでも、いくつかの気の利いた利点。

于 2010-12-02T12:34:16.093 に答える
0

ボタンハンドラーでボタン参照を比較できます。

IBOutlet UIButton * button1;
IBOutlet UIButton * button2;

-(IBAction)myButtonHanlder:(id)sender {
    if(sender == button1){
        //button1のタスクを実行します
    } else if(sender == button2){
        //button2のタスクを実行します
    }
}

注:私はコードをコンパイルしていません。しかし、私はあなたがその考えを持っていると思います。

あなたのアイデアについての私のコメントは次のとおりです。

  1. タイトルテキストや色などを変更するのは非常に自然です。ボタンのワークフローは、ビュースタイルにそれほど依存しないようにする必要があります。

  2. この比較のためにUIButtonをサブクラス化するのは、大変な作業です。

  3. これは2のこれまで以上に汚いバージョンです。

  4. さて、2つの異なるボタンに同じタグを使用していないことに非常に注意する必要があります。

于 2010-12-02T11:42:34.973 に答える
0

このコンテキストでは、UIButton クラスのサブクラスを作成し、index などのプロパティや便利なその他のプロパティを追加するのが最善の方法です。

または、ボタンの作成中にタグを割り当て、タグに基づいてそれらを区別し、必要なアクションを実行できます。

于 2010-12-02T12:50:42.320 に答える