2012-02-28 12 views
1

カスタムNSCellサブクラスIconCellを含むNSTableViewがあります。NSButtonはカスタムNSCell内に描画されますが、実際にクリック可能ではありません。

IconCellには、イメージ、テキスト、ボタンという3つの要素があります。

- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView 
{ 
    NSPoint cellPoint = cellFrame.origin; 

    [controlView lockFocus]; 

    CGFloat buttonWidth = [closeButton frame].size.width; 

    [someNSImage drawInRect:NSMakeRect(cellPoint.x, cellPoint.y, ICON_WIDTH, ICON_HEIGHT) fromRect:NSZeroRect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil]; 
    [someNSString drawInRect:NSMakeRect(cellPoint.x+ICON_WIDTH+PADDING, cellPoint.y, cellFrame.size.width - ICON_WIDTH - buttonWidth, cellFrame.size.height) withAttributes:someTextAttributes]; 
    [(NSButtonCell*)[closeButton cell] drawWithFrame:NSMakeRect(cellPoint.x + cellFrame.size.width - buttonWidth, cellPoint.y, buttonWidth, cellFrame.size.height) inView:controlView]; 

    [controlView unlockFocus]; 
} 

描画部分が正常に動作し、次のようなものを生成します:何がある

cell screenshot

ここに私の描画コードの簡易版(closeButtonがボタンである)ですが欲しいです。

また、ユーザーがセルとやりとりしたときに2つのことが起こりたいとします。ユーザーがセルのどこかをクリックすると閉じるボタンを除いて、actionAを実行する必要があります。ユーザーが閉じるボタンをクリックすると、actionBになります。

閉じるボタンが「見えない」ように見えます。クリックすると動きません(作業中のボタンは押し下げられた状態を表示するはずです)。一般に、それは動作しますあたかもそこになかったかのように、actionBの代わりにactionAがトリガーされます。私は間違って何をやっている

[tableView setAction:@selector(actionA)]; 

[closeButton setAction:@selector(actionB)]; 

これは、私は2つのアクションを設定する方法ですか?

答えて

1

セル内のボタンの画像を描画するだけです。実際のボタンをセルに配置するのと同じことではありません。

セルは完全なビューではないため、最初は思うほど複雑です。実際に細胞でこれを行う必要がある場合は、ここで説明します:NSButtonCell inside custom NSCell

自分自身を10.7+に制限できる場合は、ビューベースのテーブルビューを追加しました。これらは、NSTableViewCellViewの中に完全なNSButtonを入れることができるので、はるかに簡単です。これは、Table View Programming Guideで説明されています。あなたが10.7以上に制限できる場合には、強くお勧めします。

+0

これは、私が想像するよりはるかに複雑であることが分かりました。残念ながら私は10.6で何人かの人々をサポートしなければならないので、私は最初の解決策をとらなければならないと思う。ありがとう! – houbysoft

関連する問題