针对基于细胞的NStableVIEws描述了多种方法,例如,Mimic the artwork column,但这些并不真正适用于基于视图的表视图.
这个想法是表格由一个对象数组填充,在一个(或多个)列中跨越行,表明对象共享一些共同的数据. numberOfRowsIntableVIEw:返回项目总数(附加图像为19).
有没有人尝试过这样的东西?
布局
解决方法 我能够通过使用两个单独的NStableVIEw来实现这一点,这些NStableVIEw的NSScrollVIEw滚动同步.要了解如何同步多个滚动视图(使用确切的子类代码),请阅读 Scroll View Programming Guide for Mac – Synchronizing Scroll Views我有grouptableVIEw,它有一个列,并显示代表该组的视图.我还有itemtableVIEw,它有代表组项目的列.我使用与if-else语句相同的委托/数据源方法来检查正在使用的NStableVIEw,并使用正确的行数,单元格视图等进行相应的响应.此外,我实现了以下委托方法来调整组表视图的行高等于组中行的项行高的总和:
- (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; }}
我在组表视图上禁用了行选择以及水平和垂直滚动条.我还为两个表视图设置了水平网格.最后,我将组表视图直接放在项表视图旁边,两者之间没有间隙,因此它看起来好像只是单个表视图中的另一列.结果是一个完美的实现,在表视图之间没有任何延迟.对于用户来说,它看起来好像是一个表视图.
总结以上是内存溢出为你收集整理的macos – 如何在基于视图的NSTableView中添加行间距?全部内容,希望文章能够帮你解决macos – 如何在基于视图的NSTableView中添加行间距?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)