Swift NSTableView-更改GroupRow样式
我试图模仿MacOS联系人应用程序在我自己的应用程序中对GroupRows所做的操作,但我无法找出或找到任何地方如何摆脱群组行上方和下方的行。我尝试添加自己的自定义NSTableRowView,可以毫无问题地更改背景颜色,但不知道如何去除这些边框Swift NSTableView-更改GroupRow样式,swift,xcode,macos,cocoa,nstableview,Swift,Xcode,Macos,Cocoa,Nstableview,我试图模仿MacOS联系人应用程序在我自己的应用程序中对GroupRows所做的操作,但我无法找出或找到任何地方如何摆脱群组行上方和下方的行。我尝试添加自己的自定义NSTableRowView,可以毫无问题地更改背景颜色,但不知道如何去除这些边框 子类NSTableRowView。然后在子类中添加一个属性,如下所示: @interface CustomTableRowView : NSTableRowView @property (nonatomic, assign) BOOL isGrou
子类NSTableRowView。然后在子类中添加一个属性,如下所示:
@interface CustomTableRowView : NSTableRowView
@property (nonatomic, assign) BOOL isGroupRow;
@end
在子类中重写drawRect:
- (void)drawRect:(NSRect)dirtyRect {
if (!self.isGroupRow)
[super drawRect:dirtyRect];
}
然后在tableView:rowViewForRow中,设置isGroupRow:
tableRow.isGroupRow = [self tableView:tableView isGroupRow:row];
这将删除组行的顶部和底部分隔符。对不起,我不知道斯威夫特,但你可以很容易地翻译它。希望有帮助 另外,如果您正确设置了
[self tableView:tableView isGroupRow:row]
,我们可以省略自定义变量isGroupRow
,而使用内置的isGroupRowStyle
下面,Swift代码段创建了一个浮动分组样式的表视图行——看起来很像Finder。其中,isGroupRowStyle
区分普通行和组行<当组行未锚定在表视图顶部时,code>isFloating为真;重写trackground(in:)
将删除包裹在组行周围的分隔符
class TableRowView: NSTableRowView {
override func draw(_ dirtyRect: NSRect) {
guard isGroupRowStyle && isFloating else {
return super.draw(dirtyRect)
}
NSColor.gridColor.setFill()
dirtyRect.fill()
}
override func drawBackground(in dirtyRect: NSRect) {
// do not draw
}
}
查看
NSTableRowView
的drawSeparatorInRect
,我用我能想到的所有方法尝试了这一点。据我所知,这只适用于非groupRows的分隔符。我可能错了;如果你有它的工作,我很乐意看一看。如果它在viewFor中不工作(tableColumn:row:
您可以返回属于NSView
子类的任何内容。因此,使用文本和分隔符的自定义绘图创建您自己的视图。我知道我可以返回NSView的任何子类,但当isGroupRow设置为true时,我会继续得到相同的布局。如果我不返回,则我不会得到组行的行为。)直到下一组行将其移到一边。如果我这样做,拖放组行不会突出显示。你知道吗?