swift - 如何覆盖 NSTableHeaderView 的布局?

标签 swift nstableheaderview

我正在尝试为我的 NSTableView 生成自定义 header 。我想更改标题文本的字体并删除边框和垂直分隔符。

我当前的顶部和底部标题如下所示:

enter image description here

有人知道我该怎么做吗?

更新:应用修复后,标题现在看起来像我预期的那样:

enter image description here

最佳答案

实际上,mprudhom 和 Pronto 的回答都对最终修复做出了很好的贡献。非常感谢你们。

我想我会发布我的最终答案,这样任何后续的人都可以看到我是如何修复它的。

我不能单独使用 mprudhom 的代码,因为我的表只有一个 NSTableHeaderView 而没有 TableHeaderCells。幸运的是,Pronto 解决了这个问题:

class MyTable: NSTableView, NSTableViewDataSource, NSTableViewDelegate
{
    override func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
    {
        tableColumn!.headerCell = MyTableHeaderCell(textCell: tableColumn!.identifier)
    }
}

我直接使用了 mprudhom 的 NSTableHeaderCell 代码:

final class MyTableHeaderCell : NSTableHeaderCell
{
    required init?(coder aDecoder: NSCoder)
    {
        fatalError("init(coder:) has not been implemented")
    }

    override init(textCell: String)
    {
        super.init(textCell: textCell)
        self.font = NSFont.boldSystemFontOfSize(14)
    }

    override func drawWithFrame(cellFrame: NSRect, inView controlView: NSView)
    {
        //super.drawWithFrame(cellFrame, inView: controlView)//, since that is what draws borders
        self.drawInteriorWithFrame(cellFrame, inView: controlView)
    }

    override func drawInteriorWithFrame(cellFrame: NSRect, inView controlView: NSView)
    {
        let titleRect = self.titleRectForBounds(cellFrame)
        self.attributedStringValue.drawInRect(titleRect)
    }
}

实现这两种方法后,我遇到了最后一个问题,即 NSTableHeaderView 按要求绘制时没有边框,但背景为灰色。所以我用这个方法覆盖了 NSTableHeaderView 类:

class ForecastHeaderView : NSTableHeaderView
{
    required init?(coder: NSCoder)
    {
        super.init(coder: coder)
    }

    override init(frame frameRect: NSRect) 
    {
        super.init(frame: frameRect)
        self.wantsLayer = true
    }

    override func drawLayer(layer: CALayer, inContext ctx: CGContext)
    {
        super.drawLayer(layer, inContext: ctx)
        layer.backgroundColor = CGColorCreateGenericGray(1.0, 1.0)
    }
}

关于swift - 如何覆盖 NSTableHeaderView 的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32666795/

相关文章:

ios - 在具有容器 View 的 VC 中,prepareForSegue 在 ViewDidload 之前被调用

ios - 当我想在我的代码上使用付款方式进行集成测试时,我收到了这个错误。预期申报

swift - 快速访问表格 View 中的每个标题和控件

ios - iOS中UITable的tableheaderview需要添加多个UI元素

cocoa - NSTableHeaderView 中的填充渐变无法正常工作

ios - 如何为具有不透明主体的 UITableView header 设置清晰的背景

ios - 从 [Message] 到 [Message] 的条件转换总是成功

ios - 如何在将 xib 文件添加到 ViewController 时从右边开始动画

objective-c - 在 NSTableHeaderView 中右键单击了哪一列

ios - 使用 SnapKit,发现很难将新约束附加到现有约束