2009-08-25 15 views
0

いくつかのUILabelsと2つのUITextFieldで構成される独自のコントロールを作成したいと思います。問題はどこから始めるべきかわからないことです!私はUIControlを直接サブクラス化し、サブビューを作成してinitのメインビューに追加します:または、layoutSubviewsを使用しますか?私はdrawRectをオーバーライドする必要がありますか?UIControlのサブクラス化を開始する場所を特定できません!

サブビューの追加を処理する "コントローラ"クラスを作成するのに慣れていましたが、UIControlをサブクラス化すると、どのようなメソッドをオーバーライドして設定するのかわかりません!

私はこれをやったことがないので、私は本当にいくつかの指摘を感謝します!

乾杯!

答えて

6

UIControlを本当に送ってもよろしいですか? UIControlクラスは、ボタンやテキストフィールドのような限られた一連のイベント(「タッチ」や「値の変更」など)をサポートする必要がある、非常に単純で一般的に再利用可能なコントロールを対象としています。複数のビューをまとめてグループ化する方法を作成しようとしている場合は、代わりにUIViewを使用してください。

  1. はあなたのサブビューを作成し、-initWithFrame:にそのプロパティのほとんどを設定します。いずれの場合も

    は、ここにあなたが何をすべきかです。それらをインスタンス変数に保存し、それらを自己のサブビューとして追加します。

  2. -layoutSubviewsにフレームを設定し、self.boundsに基づいて計算します。これは、-initWithFrame:以降を含め、ビューのサイズが変わるたびに呼び出されます。

カスタムコアグラフィックス機能と描画を行う必要がない限り、あなたは-drawRect:を実装する必要はありません。

+0

initWithFrameにUILabelのようなサブビューを追加してlayoutSubviewsにフレームを設定すると、drawRectを使用してUILabelの下に描かれた線のようなUI要素をさらに追加することはできませんか? –

+0

'-drawRect:'を使って、カスタムCore Graphics(または今は 'UIBezierPath')の描画を行うことができます。しかし、この図面はすべてのサブビューの下にあります。サブビューが不透明な場合、 '-drawRect:'描画は表示されません。たとえば、UILabelの場合、 'backgroundColor'が' 'UIColor clearColor ''で、 'opaque'プロパティが' 'NO''に設定されていることを確認する必要があります。 –

関連する問題