nscollectionViewitemのカスタムコントロール
-
01-10-2019 - |
質問
nscollectionViewitemのビュー内にカスタムコントロールを配置したいと思います。
boxesview.boxesviewと呼ばれるカスタムnsviewがあるとしましょう。その数のボックスは、initメソッドで設定されています。 8に設定したとしましょう。
コレクションビューをロードすると、ビュー内の他のすべてのコントロールが正常に機能します(ボタン、スライダーなど)が、私のビューは描かれません。
BoxesViewのDrawRectメソッドにブレークポイントを設定すると、描画するボックスの数が0であることがわかります。 numboxesを8に設定するINITメソッドにブレークポイントを設定すると、Numboxが実際に8に設定されることが示されます。また、コレクションビューに複数の行がある場合でも、initメソッドは1時間と呼ばれます。
私は何が間違っているのですか?
アップデート
nscollectionViewItemと同じXIBにあるのではなく、XIBからアイテムプロトタイプを設定することにより、これを機能させることができました。これは素晴らしいことですが、10.5ではなく10.6でのみ動作します。
更新2
私がやろうとしているのは、すでに存在するnscollectionViewitemのために既に存在していたビュー内に私のカスタムビューを貼り付けることです。何が起こるかは、メンバー変数mboxwidthが吹き飛ばされ、ゼロであるため、描画すると何も起こりません。
@implementation DumbView
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
mBoxWidth = 3;
}
return self;
}
- (void)drawRect:(NSRect)dirtyRect {
NSRect bounds = self.bounds;
[[NSColor redColor]set];
[NSBezierPath fillRect:NSMakeRect(bounds.origin.x, bounds.origin.y, mBoxWidth, mBoxWidth)];
}
@終わり
解決
InitWithCoderを実装しませんでした。それはすべてを修正します。
他のヒント
nscollectionViewItemは、コレクションの代表されたオブジェクトの各アイテムに対して複製および配線されているプロトタイプビューを使用します。
君 たぶん......だろう カスタムビュー(numberofboxestodrawバインディングを露出させるもの)のためにibpluginを作成するためにすべてのトラブルを経験しますが、それはお尻の痛みであり、簡単な方法があります:手動のバインディング。
nscollectionView/itemで手動バインディングを使用します
まず、subclcass nscollectionViewitemは、IBにこの新しいサブクラスを使用するように指示し、カスタムビューに接続されているアウトレット(BoxViewなど)があることを確認してください。
次に、サブクラスnscollectionView(このサブクラスを使用するようにIBを設定)とオーバーライド -newitemforrepresentededobject:. 。その中で、最初にスーパー(結果をローカル変数に保存)を呼び出し、次にモデルで使用している「numberofboxes」キーを使用して、「boxview」のボックス数を表現されたオブジェクトに手動でバインドします。
CopyWithZoneのオーバーロードを試みましたか?
私はあなたのアイテムがコピーされていると推測していますが、直接開始されていません。