我正在尝试使用Lion引入的基于视图的NSTableView来实现如下所示的表格布局。
对于基于单元格的NSTableView,有多种方法可供选择,例如模仿艺术列,但是这些方法并不适用于基于视图的表格视图。
思路是通过对象数组填充表格,在一列(或多列)跨越行中指示对象共享某些数据。 numberOfRowsInTableView:
返回项目的总数(在附加图像的情况下为19)。
有人尝试过这样的方法吗?
布局
我正在尝试使用Lion引入的基于视图的NSTableView来实现如下所示的表格布局。
对于基于单元格的NSTableView,有多种方法可供选择,例如模仿艺术列,但是这些方法并不适用于基于视图的表格视图。
思路是通过对象数组填充表格,在一列(或多列)跨越行中指示对象共享某些数据。 numberOfRowsInTableView:
返回项目的总数(在附加图像的情况下为19)。
有人尝试过这样的方法吗?
布局
- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row
{
if (tableView == self.groupTableView) {
NSUInteger firstRowIndexForGroup = ...;
NSUInteger lastRowIndexForGroup = ...;
CGFloat groupHeight = 0.0;
for (NSUInteger currentRowIndex = firstRowIndexForGroup; currentRowIndex <= lastRowIndexForGroup; currentRowIndex++) {
groupHeight += [self.itemTableView rectOfRow:lastRowIndexForGroup].size.height;
}
return groupHeight - [self.itemTableView intercellSpacing].height;
} else {
return self.itemTableView.rowHeight;
}
}
每当表格视图需要一个分组视图时,您还必须调用-noteHeightOfRowsWithIndexesChanged:
,因为高度会根据组中行数的变化而改变。
- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
if (tableView == self.groupTableView) {
GroupRowView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
// configure view
[tableView noteHeightOfRowsWithIndexesChanged:[NSIndexSet indexSetWithIndex:row]];
return view;
} else {
ItemRowView *view = [tableView makeViewWithIdentifier:tableColumn.identifier owner:self];
// configure view
return view;
}
}
NSOutlineView
代替呢?它是专门设计用于支持分组的。