Table
在 SwiftUI 中,Table
组件用于创建类似于 UIKit 中 UITableView
的表格视图。Table
允许你以行和列的方式展示数据,适合展示复杂的列表或表格数据。以下是如何在 SwiftUI 中使用 Table
的基本示例和功能介绍。
1. 基本用法
import SwiftUI
struct ContentView: View {
let items = ["Item 1", "Item 2", "Item 3", "Item 4"]
var body: some View {
Table(items, id: \.self) {
TableColumn("Items") { item in
Text(item)
}
}
}
}
在这个示例中,我们创建了一个简单的 Table
,并用一个字符串数组作为数据源。TableColumn
定义了每一列的标题和内容。
2. 使用模型数据
通常情况下,您可能会使用模型数据而不是简单的字符串数组。以下是使用结构体作为数据模型的示例:
struct Item: Identifiable {
var id = UUID()
var name: String
var description: String
}
struct ContentView: View {
let items = [
Item(name: "Item 1", description: "Description 1"),
Item(name: "Item 2", description: "Description 2"),
Item(name: "Item 3", description: "Description 3")
]
var body: some View {
Table(items) {
TableColumn("Name", value: \.name)
TableColumn("Description", value: \.description)
}
}
}
在这个示例中,我们定义了一个 Item
结构体,并使用 Identifiable
协议来标识每个项目。TableColumn
可以通过 value:
参数直接绑定到模型属性。
3. 增加交互功能
可以为 Table
添加行选择、删除和编辑功能。以下是一个添加行选择功能的示例:
struct ContentView: View {
@State private var selectedItem: Item?
let items = [
Item(name: "Item 1", description: "Description 1"),
Item(name: "Item 2", description: "Description 2"),
Item(name: "Item 3", description: "Description 3")
]
var body: some View {
Table(items, selection: $selectedItem) {
TableColumn("Name", value: \.name)
TableColumn("Description", value: \.description)
}
.onChange(of: selectedItem) { newItem in
if let item = newItem {
print("Selected item: \(item.name)")
}
}
}
}
在这个示例中,我们使用 @State
属性包装器来存储选中的项目,并在选择发生变化时执行操作。
4. 表格行的删除功能
要实现删除功能,可以使用 onDelete
修饰符,允许用户通过滑动手势删除行:
struct ContentView: View {
@State private var items = [
Item(name: "Item 1", description: "Description 1"),
Item(name: "Item 2", description: "Description 2"),
Item(name: "Item 3", description: "Description 3")
]
var body: some View {
Table(items) {
TableColumn("Name", value: \.name)
TableColumn("Description", value: \.description)
}
.onDelete { indexSet in
items.remove(atOffsets: indexSet)
}
}
}
在这里,我们使用 onDelete
修饰符来响应用户删除行的操作。
5. 自定义行视图
你还可以自定义行的视图,以便在每行中展示更复杂的 UI 元素:
struct ContentView: View {
let items = [
Item(name: "Item 1", description: "Description 1"),
Item(name: "Item 2", description: "Description 2"),
Item(name: "Item 3", description: "Description 3")
]
var body: some View {
Table(items) {
TableColumn("Name") { item in
HStack {
Image(systemName: "star")
Text(item.name)
}
}
TableColumn("Description", value: \.description)
}
}
}
在这个示例中,我们在表格的“Name”列中添加了一个图标,以创建更具视觉吸引力的行。
总结
Table
是 SwiftUI 中用于创建表格视图的组件,支持行和列的布局。使用
TableColumn
定义列,支持绑定到模型数据。可添加交互功能,如选择、删除等。
支持自定义行视图,以显示更复杂的内容。
这些功能使得 Table
成为在 SwiftUI 应用中展示结构化数据的强大工具。
Last updated