使用Cocoa绑定,它非常强大,可以节省大量样板代码。
简短教程:
要充分利用KVC,数据源必须是
NSObject
子类
dynamic
-
创建一个简单的类
Dream
(the)
description
属性(可选)
class Dream : NSObject {
@objc dynamic var name : String
init(name : String) { self.name = name }
override var description : String { return "Dream " + name }
}
-
在视图控制器中声明数据源数组
var dreams = [Dream]()
-
var selectedRow:Int = 0
具有
@objc dynamic var selectedIndexes = IndexSet()
-
-
选择表格视图,按
7
绑定
Selection Indexes
到
View Controller
模型密钥路径
selectedIndexes
.
按
6
并连接
dataSource
) .
-
选择文本字段
File 1
在里面
Table Cell View
在表列中。最简单的方法是
在文本字段区域中。
按
7
并绑定
Value
到
表格单元格视图
objectValue.name
(
!
-
在视图控制器中,在中填充数据源数组
viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
let dreamNames = ["Hit the gym", "Run daily", "Become a millionaire", "Become a better programmer", "Achieve your dreams"]
dreams = dreamNames.map{Dream(name: $0)}
table.reloadData()
}
-
删除
acceptsFirstResponder
-
删除
tableViewSelectionDidChange
-
tableView:viewFor:row:
-
添加
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return dreams[row]
}
-
addNewDream
具有
func addNewDream() {
let last = dreams.count
dreams.append(Dream(name: "Double Click or Press Enter to Add Item"))
table.insertRows(at: IndexSet(integer: last), withAnimation: .effectGap)
table.scrollRowToVisible(last)
table.selectRowIndexes([last], byExtendingSelection: false)
saveDreams()
}
-
替换
removeDream()
具有
func removeDream() {
guard let selectedRow = selectedIndexes.first else { return }
dreams.remove(at: selectedRow)
table.removeRows(at: IndexSet(integer: selectedRow), withAnimation: .effectFade)
saveDreams()
}
要在以后编辑文本时保存数组,必须实现delegate方法
controlTextDidEndEditing(_:)
override func controlTextDidEndEditing(_ obj: Notification) {
saveDreams()
}
delegate
将表视图中的文本字段添加到视图控制器。