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