Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何以粗体显示NSTableView的某些特定项?_Swift_Xcode_Nstableview - Fatal编程技术网

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

Swift 如何以粗体显示NSTableView的某些特定项?,swift,xcode,nstableview,Swift,Xcode,Nstableview,我想将不可编辑、基于视图的NSTableView的某些项设置为粗体。这些项目对应于我用来填充TableView的数组的特定索引号 我想在向用户显示NSTableView之前设置更改 我尝试用这种方法处理此更改,但找不到方法: func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? 如果您不想使用Cocoa绑定 在iOS上的操作方式非常相似。

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

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

我尝试用这种方法处理此更改,但找不到方法:

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

如果您不想使用Cocoa绑定 在iOS上的操作方式非常相似。在
tableView(uquo:viewFor:row:)中配置单元格的视图

如果要使用Cocoa绑定 Cocoa绑定可以使这变得非常简单,但是如果你设置了最细微的错误,就很难找出问题的症结所在。注意:

使用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
    }
}
然后,界面生成器配置:

  • 确保表格列表格单元格视图具有相同的标识符。最好是将这两个选项都留空,以便自动执行
  • 选择表视图,将表内容绑定到视图控制器,模型键路径=
    self.daysOfWeek
  • 选择表格视图单元格,将值绑定到表格单元格视图(不要开玩笑),模型键路径=
    objectValue.name
  • 向下滚动,将粗体字体绑定到表格单元格视图,模型键路径=
    objectValue.isBold

  • 无论哪种方式,您都应该得到如下结果:


    根据需要抛光。

    不要使用那种方法。那是老派的。您应该使用基于视图的表。返回视图并设置自定义视图(单元格)的文本。对于属性化文本,您需要一个NSAttributedString。将布尔属性
    isBold
    添加到您的模型中,并将
    表格单元格视图->objectValue.isBold
    绑定到文本字段的
    Font-Bold
    。因为您在OS X上,您可以使用
    NSAttributedString
    或Cocoa绑定以粗体显示it@matt抱歉,我在问题标题中出错,我编辑了它now@user965972
    objectValueForColumn:row
    是一种当代数据源方法,可用于基于视图的表视图的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
        }
    }