如何以粗体显示NSTableView的某些特定项?

时间:2017-02-03 17:56:54

标签: swift xcode nstableview

我想用粗体设置一些不可编辑的基于视图的NSTableView。这些项对应于我用来填充TableView的数组的特定索引号。

我想在向用户显示NSTableView之前设置更改。

我尝试在此方法中处理此更改但我无法找到方法:

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?

enter image description here

1 个答案:

答案 0 :(得分:3)

如果您不想使用Cocoa Bindings

它与你在iOS上的表现非常相似。在tableView(_:viewFor:row:)

中配置单元格的视图
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
    @IBOutlet weak var tableView: NSTableView!

    var daysOfWeek = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]
    var boldDays = ["Monday", "Wednesday"]

    override func viewDidLoad() {
        self.tableView.dataSource = self
        self.tableView.delegate = self
    }

    func numberOfRows(in tableView: NSTableView) -> Int {
        return daysOfWeek.count
    }

    func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        // Assuming that you have set the cell view's Identifier in Interface Builder
        let cell = tableView.make(withIdentifier: "myCell", owner: self) as! NSTableCellView
        let day = daysOfWeek[row]

        cell.textField?.stringValue = day
        if boldDays.contains(day) {
            let fontSize = NSFont.systemFontSize()
            cell.textField?.font = NSFont.boldSystemFont(ofSize: fontSize)

            // if you require more extensive styling, it may be better to use NSMutableAttributedString
        }

        return cell
    }   
}

如果您想使用Cocoa Bindings

Cocoa Bindings可以让这个变得非常简单,但是如果你设置了一些错误的东西,很难弄清楚事情的发展方向。注意warning from Apple

  

使用Cocoa绑定填充表视图被认为是一个高级主题。尽管使用绑定需要的代码要少得多 - 在某些情况下根本没有代码 - 如果您不熟悉接口,很难看到和调试绑定。在您决定使用Cocoa绑定之前,强烈建议您熟悉以编程方式管理表视图的技术。

无论如何,这是如何做到的。首先,代码:

// The data model must inherit from NSObject for KVO compliance
class WeekDay : NSObject {
    var name: String
    var isBold: Bool

    init(name: String, isBold: Bool = false) {
        self.name = name
        self.isBold = isBold
    }
}

class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
    @IBOutlet weak var tableView: NSTableView!

    let daysOfWeek = [
        WeekDay(name: "Sunday"),
        WeekDay(name: "Monday", isBold: true),
        WeekDay(name: "Tuesday"),
        WeekDay(name: "Wednesday", isBold: true),
        WeekDay(name: "Thursday"),
        WeekDay(name: "Friday"),
        WeekDay(name: "Saturday")
    ]

    override func viewDidLoad() {
        self.tableView.dataSource = self
        self.tableView.delegate = self
    }
}

然后是Interface Builder配置:

  1. 确保表格列表格单元格视图具有相同的标识符。最好是将它们都留空以便自动
  2. Table Column and Table Cell View identifier

    1. 选择表视图,将表内容绑定到View Controller,模型键路径= self.daysOfWeek
    2. Bind Table Content

      1. 选择表格视图单元格,将值绑定到表格单元格视图(不开玩笑),模型关键路径= objectValue.name
      2. Bind Value

        1. 向下滚动,将字体粗体绑定到表格单元格视图,模型关键路径= objectValue.isBold
        2. Bind Font Bold

          无论哪种方式,你都应该得到这样的结论:

          Result

          根据需要进行波兰语。