私は実際に(サイドバーに)この質問を見つけました。サブクラスNSTableRowView
に助言しています。私はすでにそれを前にしていたが、うまくいかなかった。しかし、この答えは非常に有益ではないので、私は私が作るためにやっているカバーしようとする...
Handling custom selection style in view based NSTableView
を私は再びそれを試してみましたが、非常に驚くべきことは、動作するようになりましたこの作品。
まず、次のNSTableViewデリゲートメソッドを実装し、nilを返します。:
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row{
return nil;
}
ベースのビュー(私は... NSTableViewRowが同様にビューベーステーブルを考えていると思います)あなたは、このメソッドを実装する必要がテーブルを使用するためには。私は何が間違っているかもしれないことは確かではありませんが、この方法がなければ、私の細胞は表示されません!
NSTableViewは、このプロパティを設定することで、任意の選択を処理させないようにしてください:
yourNSTableView.selectionHighlightStyle = NSTableViewSelectionHighlightStyleNone;
わかりましたので、今、私たちは、次のデリゲートメソッドで我々の細胞を設定したい:
-(NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row{
static NSString *cellID = @"cell_identifier";
//use this if you want to reuse the cells
CustomTableRowView *result = [tableView makeViewWithIdentifier:cellID owner:self];
if (result == nil) {
result = [[CustomTableRowView alloc] initWithFrame:NSMakeRect(0, 0, self.frame.size.width, 80)];
result.identifier = cellID;
}
result.data = [tableData objectAtIndex:row];
// Return the result
return result;
}
さて、今度はサブクラスNSTableRowView
をサブクラス化し、次の2つのメソッドを実装/オーバーライドします。
まず、setSelected:
をオーバーライドする必要があります。セルが選択されたときに背景を再描画するようにします。だからここにある:先に述べたように、私たちはその背景を再描画するセルのためにsetNeedsDisplay:
を呼び出す
-(void)setSelected:(BOOL)selected{
[super setSelected:selected];
[self setNeedsDisplay:YES];
}
。
最後に、描画コード。方法このようなdrawBackgroundInRect:
オーバーライド:
私は最初のビットは必要ないとわかりましたが、残りは+1に役立ちました。ありがとう。 – lateAtNight
@lateAtNight喜んでそれを助けました:) –
誰かを助ける場合、私は10.9でSwiftを使ってこれをやろうとしていましたが、CGContextRefを取得するのはちょっと違います。この回答を参照してください:http://stackoverflow.com/a/24056236/2708274 – Matt