【问题标题】:Set cell corner radius in NSTableview在 NSTableview 中设置单元格角半径
【发布时间】:2021-03-02 22:40:49
【问题描述】:

有没有办法在NSTableView 的单元格上获得圆角(最好是阴影)?我找到了一种在NSScrollView上获得圆角的方法

 scrollView.wantsLayer = true
 scrollView.layer?.cornerRadius = 20    

但我无法让它在实际的单元格上工作。

编辑。

func numberOfRows(in tableView: NSTableView) -> Int {
    return names.count
}
    
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
    return names[row]
}   

我在单元格中有 3 个标签,每个标签都使用 Bind To -> Table Cell View 而在 Model Key Path 中我有 objectValue.theValueIWantToDisplay

【问题讨论】:

  • 您使用的是什么类型的单元格? NSView(又名NSTableCellView)或NSCell?
  • NSTableCellView
  • 您能否编辑您的问题以显示有关您如何在表格中创建(或获取)NSTableCellView 的更多详细信息?
  • 我已经编辑了这个问题。这能把事情弄清楚吗?我对此很陌生,所以请耐心等待
  • 我不相信objectValueFor tableColumn 会给你你最终想要的东西,特别是如果你使用默认的NSTableViewCell。为了更接近您需要做的事情,我认为您需要创建和使用自己的自定义 NSTableCellView,然后通过 func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? 返回该自定义视图,就像您将在 this RayWenderlich tutorial 中看到的一样。跨度>

标签: swift xcode macos cocoa


【解决方案1】:

使用基于视图的NSTableView 呈现表视图行和表视图单元格(它们是不同的,前者是后者的父级)完全取决于视图。只需将它们子类化为任何其他视图并使用其许多自定义点。

如果没有子类化,您应该能够使用-[NSView setWantsLayer:],然后使用-[NSView layer]-[CALayer setCornerRadius:]-[NSView setShadow:] 来达到预期的效果。要自定义,请实现 -[NSTableViewDelegate tableView:viewForTableColumn:row:] 和/或 -[NSTableViewDelegate tableView:rowViewForRow:]

【讨论】:

  • “表格视图行和表格视图单元格”不应该是“表格行视图和表格单元格视图”吗?是NSTableRowViewNSTableCellView
  • 是的,我总是混淆顺序:)
猜你喜欢
  • 2016-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-20
相关资源
最近更新 更多