【问题标题】:Merge cells of NSTableView合并 NSTableView 的单元格
【发布时间】:2018-08-04 22:58:05
【问题描述】:

有没有办法在 NSTableView 中合并单元格?

我知道在 NSTableView 中显示数据有两种模式:基于单元格和基于视图。如果数据由单元格呈现,函数

tableView(_ tableView: NSTableView, viewFor tableColumn:  NSTableColumn?, row: Int) 

负责,否则

tableView(_ tableView: NSTableView, rowViewForRow row: Int)

目前我正在使用第一个。在 iOS 中,您可以使用界面生成器中的单元格原型将视图与自定义 UITableViewCell 链接,但是如何在 NSTableView 中实现完整行呢?

【问题讨论】:

  • 不,tableView(_:viewFor:row:) 是一种基于视图的表格视图方法。 “如果您想在表格视图中使用 NSView 对象而不是 NSCell 对象来处理表格视图中的单元格,则需要此方法。”
  • 我认为您可能会将“单元格”与表格中的单个正方形混淆。 cell,在 Cocoa 中,是一个执行视图渲染的对象(通常是控件)。例如,NSButton 具有实际执行绘图的 NSButtonCell 对象。如果要“合并”一行的单元格并使用单个视图绘制整行,则需要实现- [NSTableViewDelegate tableView:rowViewForRow:]。该方法首先被调用,如果它返回一个视图,则该视图用于整行。
  • 想一想,我不确定这是否正确。但是表委托有一种方法可以指定哪些行显示单个视图,哪些是“整个”行视图。我将从 WWDC 基于视图的表格视图视频开始,并查看一些示例项目——因为表格视图编程指南或 API 文档似乎都没有解释这一点。

标签: cocoa interface-builder nstableview


【解决方案1】:

也许我找到了解决方案:你可以同时使用

tableView(_:viewFor:row:)

tableView(:viewFor:tableColumn:row:)

但您必须注意 tableView 并没有对一个单元格使用两种方法(互斥)。

现在您可以定义一个 xib,其中包含一个 UIView。将 UIView 的类更改为 NSTableRowView。接下来,将 viewDidLoad 中的类加载到您的表中:

if let nib: NSNib = NSNib(nibNamed: NSNib.Name("SpecialRow"), bundle: nil) {
    self.tableView?.register(nib, forIdentifier: NSUserInterfaceItemIdentifier("specialRow"));
}

在您的表格方法 rowViewForRow 中,您可以执行以下操作:

if let srow: SpecialRow = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "specialRow"), owner: nil) as? SpecialRow {
    // ...

    return srow;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2013-04-24
    相关资源
    最近更新 更多