3

</ p>

あらすじ

カレンダーにイベントを表示するカスタムコントロールを作成したいと思います。

ドラフトは次のとおりです。

ここに画像の説明を入力してください

コンセプト

  • 左下のボックスは垂直方向にスクロール可能です。右下のボックスは両方向にスクロール可能です。
  • イベントビューを移動することができます。ビューをドラッグしているときに境界に近づくと、その方向に自動スクロールします。
  • スクロール領域は、データベース内の最も早いイベントと最も遅いイベント、または特定の最大値に応じて有限になります。ただし、ユーザーがスクロールを続けると、それに応じてスクロール領域が拡大し、ユーザーがスクロールバックして新しいイベントを作成しなかった場合は折りたたみます。
  • 下部にあるこの「2011年7月」ボタンはスクローラーとして機能します。ユーザーがスクロール領域の境界を超えて引っ張ると、それに応じて大きくなります。
  • ヘッダーの月の名前は、次の月が移動するまで常にこの位置にとどまるため、その月の日のセルにまたがる長いセルであり、キャプションがフローティングになっています。
  • ヘッダーの行と列は常に表示されます。

質問

私はカプチーノまたはココアのコントロールクラスの機能に少ししか精通していないので:カプチーノまたはココアクラスを直接使用できる場所、カプチーノ/ココアコントロールをサブクラス化するのが合理的である場所、およびカスタムコントロールを最初から作成する必要がある場所?

編集:私の考え

垂直分割器を備えたSplitViewでコントロールを分割するのは合理的だと思います。左側のサブビューの左側のヘッダー列にTableViewを使用できます。そして、垂直スクロールを右側で発生するものと同期させることができました。

でも、右側の景色はよくわかりません。TableViewについて考えましたが、実際には、セルを背景グリッドとしてのみ必要とします。したがって、ヘッダー行を2つにして、目的のスクロール動作を実装するのは難しいと思います。したがって、最善の方法は、おそらく完全に新しいカスタムビューを作成することです。しかし、もう一度質問します。カプチーノまたはカプチーノをサブクラス化するのはどこが合理的ですか。Cocoaコントロールと、カスタムコントロールを最初から作成する必要がある場所はどこですか?

4

1 に答える 1

2

カレンダービューの場合、テーブルビューとは十分に異なって見えるため、最初から作成する方が簡単な場合があります。おそらく、裸から始めて、CPViewそのdrawRect:メソッドで背景を描画してCPControlから、イベントのサブクラスを作成します。drawRectで、境界線と背景をレンダリングするか、withを使用CPBoxsetBackgroundColor:ます。テキストは、ラベルサブビューを使用して描画するのが最適です。ドラッグアンドドロップ、ダブルクリックイベント、その他必要なものを実装するには、などに反応しmouseDownます。

次に、カレンダービュー全体をに配置しCPScrollViewます。垂直スクロールを左側のスクロールビューと同期します-CPTableViewそこで使用します。スクロールは、コンテンツビューをCPScrollView呼び出すだけでかなり簡単です。scrollToPoint:「無限」のスクロールを可能にするには、コンテンツビューのサイズを動的に拡張する必要があります。たぶん、単に常にコンテンツビューのサイズをそのイベントのサイズと現在のスクロール位置の最小値+ X(Xは、ユーザーが再度サイズを変更する前にスクロールする距離を与える)にします。

一言で言えば、サブクラスCPViewCPControl-CPView相互作用がない場合と相互作用があるCPControl場合。

于 2011-08-25T14:29:05.763 に答える