2011-09-12 7 views
3

を作成し、は、私は次の操作を行うための最善の方法を思っていたカスタムUIButtonクラス

  1. は多くのボタンを作成します。
  2. カスタマイズされた文字列で各ボタンを識別できるようにします。

おそらくUIViewのサブクラス化が機能するかもしれないが、UIButtonのサブクラス化は非常に不可能であると読んだ。また、UIViewをサブクラス化してボタンでフレームを塗りつぶした場合、これらのうち50個が画面に表示され、パフォーマンス上の問題が発生することがありましたが、明らかにグラフィックスとは何か関係があります。しかし、もっと簡単な方法がありますか?

私はUItableviewcellをサブクラス化するのがかなり簡単だと思っています。ちょっとしたヒントや、UIButtonに似たものを教えてくれるsnip'itが好きです。

ありがとうございます!

+0

ボタンのサブクラス化が不可能なのはなぜですか? – Nekto

+0

まあ、不可能ではないと思いますが、人々はそれをしないと言ったところでここで3つの質問を読んでいます。 –

+0

Crazy variant:サブビューとして 'UILabel'を追加し、ラベルテキストにidを隠して保存します。あなたはこのことについてどう思いますか? – Nekto

答えて

4

tagプロパティをUIViewにするのが最も良い方法です。 (UIButtonUIViewのサブクラスです)tagは単なる整数なので、ループなどには非常に適しています。言うまでもなく、サブクラスでも動作します。

この方法は、Appleの例の多くにも現れます。他の変数を保持する必要がないので便利です。また、viewWithTagを経由してボタンにアクセスするための非常に実用的な方法があります。

UIButton *button = (UIButton *)[theSuperView viewWithTag:i]; 

私は例えば、このようにピアノの鍵盤を実装しています。タグで各キー(またはピッチ)を識別するアルゴリズムを書くことは非常に簡単です。

+0

これらのボタンが必要ですグリッドなので、私はより多くの座標を望んでいました。タグは保持できません –

+0

座標はボタンの 'frame'プロパティに格納できます。また、座標を含む 'tag'を構築することもできます。例えば。 '{1,3} 'の' 101103'のような数字は、簡単な整数演算を使って扱うことができます。 – Mundi

+0

'101103'を' {1,3} 'に変換する方法はありますか? –

3

実際にUIButtonをサブクラス化したい場合は、それを行うことができます。しかし、+buttonWithTypeを呼び出してUIButtonの代わりにサブクラスを直接インスタンス化すると、問題が発生する可能性があります。

カスタムボタンNSStringまたは他のオブジェクトを各ボタンと関連付けたい場合は、Associative Referencesを使用します。

forループを使用して複数のボタンを一度に作成することができます。ボタンをサブビューにすぐに追加したくない場合は、NSArrayを補佐することができます。

もう1つの方法は、オブジェクトがUIButtonであるNSDictionaryを作成することです。キーは、各ボタンを識別するNSStringです。

+0

私はAssociative Referencesを見て、必要なものだけを考えています。作成する各ボタンにint値を追加して、その(x/y)座標を追跡できるようにしたいと思います。しかし、私は正確にどのようにUIButtonに設定するのか正確に理解していません。手伝ってくれる? –

+0

@James:もしあなたが望むものが 'int'なら、' UIButton'の 'tag'プロパティを設定するだけです。 'button.tag = 42'です。 – PengOne

+0

しかし、単にタグ以外のものが必要な場合は、intの例を見て、私が望むものを得るためにプロセスを繰り返すほうが簡単だと思ったのです –

関連する問題