Cocoaで単一列のビューベースのNSTableviewを作成しようとしています。テーブルの最初の行をグループ行にし、NSTableRowViewをサブクラス化して透過的なグループ行を作成します。ここまでは順調ですね。次に、2番目の行をコンテンツを含むカスタムセルにします。3番目の行は、代わりに再びグループ行にする必要があります(新しいセクションの開始を示します)。
これが私のテーブルビューのデリゲートメソッドのコードです:
- (BOOL)tableView:(NSTableView *)tableView isGroupRow:(NSInteger)row
{
if ((row == 0) || (row == 2)) return YES;
return NO;
}
- (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row
{
TransparentGroupRowView *rowView = [[TransparentGroupRowView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)];
return rowView;
}
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
if (row == 0) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"headerCell" owner:self];
cellView.textField.stringValue = @"Propagation Dimension";
return cellView;
} else if (row == 1) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"propagationDimensionCell" owner:self];
if (self.geometry.propagationDimension) cellView.textField.stringValue = self.geometry.propagationDimension;
return cellView;
} else if (row == 2) {
NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"headerCell" owner:self];
cellView.textField.stringValue = @"Transverse Dimensions";
return cellView;
}
}
残念ながら、結果として、最初の行が2番目の行の上に描画されます。最初の行の代わりに、空のスペースがあります。これはさらに奇妙な振る舞いです。最初の行のメソッドisGroupRowにNOを返すと、正しい位置に表示されますが、明らかに私が望むものとは異なって見えます。
ポインタの問題のように思えますが、問題がどこにあるのかわかりません。
ご覧のとおり、横方向の寸法は背景が透明で正しく表示されます。代わりに、伝播ディメンションが2番目の行(灰色)の上に描画されます。上部の空白スペースは、最初のグループ行(伝播ディメンション)があるべき場所です。