swift 3 - 带有更多文本字段的表格视图单元格
swift 3 - tableview cell with more textfield
我在 macOS 上使用 swift 3,我有一个表格视图,它将填充如下数据:
var test = ["Person 1","Person 2","Person 3"]
func numberOfRows(in tableView: NSTableView) -> Int {
return test.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return ("\(test[row]) \(test[row])")
}
这很好用。但是,如果每个单元格都有一个以上的文本字段,我该如何填充数据?
如何为每个单元格的正确文本字段分配值?
在 iOS 中有一个包含原型单元和自定义单元的解决方案。
但它如何适用于 macOS?
视情况而定。
首先NSTableView
比UITableView
多才多艺。
在基于 table 的视图中,您可以将所有内容用作继承自 NSView
的视图。这可以是单个 NSTextField
(不包含视图)一个专用的 NSTableCellView
实例,有或没有额外的内容或有自定义内容的自定义视图。
您还可以使用包含全部内容的单个列或多个列。
您的数据源是一维的,每行只有一个值。要分配多个值,您需要一个模型,例如自定义 class(class – 而不是结构 – 需要能够使用 Cocoa 绑定)。
假设您有三列标准 NSTableCellView
实例。
创建模型
class Person {
let firstName, lastName, email : String
init(firstName ...
}
在控制器中创建一个包含 Person
个实例的数组
var people = [Person]()
方法numberOfRows
未修改
func numberOfRows(in tableView: NSTableView) -> Int {
return people.count
}
在方法 objectValueFor
中只是 return 给定行的 Person
实例
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return people[row]
}
macOS 魔法来了:在 Interface Builder 中打开 Bindings Inspector (⌥⌘7) 并绑定每个文本字段的 Value
Table Cell View
和 Model Key Path
到 objectValue.firstName
、objectValue.lastName
或 objectValue.email
.
绑定将模型属性动态连接到文本字段的字符串值。对于具有多个 UI 元素的单列或分别具有单个元素的多列,过程是相同的。
我在 macOS 上使用 swift 3,我有一个表格视图,它将填充如下数据:
var test = ["Person 1","Person 2","Person 3"]
func numberOfRows(in tableView: NSTableView) -> Int {
return test.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return ("\(test[row]) \(test[row])")
}
这很好用。但是,如果每个单元格都有一个以上的文本字段,我该如何填充数据?
如何为每个单元格的正确文本字段分配值?
在 iOS 中有一个包含原型单元和自定义单元的解决方案。 但它如何适用于 macOS?
视情况而定。
首先NSTableView
比UITableView
多才多艺。
在基于 table 的视图中,您可以将所有内容用作继承自 NSView
的视图。这可以是单个 NSTextField
(不包含视图)一个专用的 NSTableCellView
实例,有或没有额外的内容或有自定义内容的自定义视图。
您还可以使用包含全部内容的单个列或多个列。
您的数据源是一维的,每行只有一个值。要分配多个值,您需要一个模型,例如自定义 class(class – 而不是结构 – 需要能够使用 Cocoa 绑定)。
假设您有三列标准 NSTableCellView
实例。
创建模型
class Person { let firstName, lastName, email : String init(firstName ... }
在控制器中创建一个包含
Person
个实例的数组var people = [Person]()
方法
numberOfRows
未修改func numberOfRows(in tableView: NSTableView) -> Int { return people.count }
在方法
objectValueFor
中只是 return 给定行的Person
实例func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { return people[row] }
macOS 魔法来了:在 Interface Builder 中打开 Bindings Inspector (⌥⌘7) 并绑定每个文本字段的
Value
Table Cell View
和Model Key Path
到objectValue.firstName
、objectValue.lastName
或objectValue.email
.
绑定将模型属性动态连接到文本字段的字符串值。对于具有多个 UI 元素的单列或分别具有单个元素的多列,过程是相同的。