【发布时间】:2020-04-09 10:15:15
【问题描述】:
我有一个 UITableViewController。每一行都是从一个全局数组中填充的。 此全局数组描述任务的标题。每个任务应该有 3 个相关的字符串变量。
我希望能够单击表格视图控制器中的任务标题并将相关变量链接到该标题。 随着最终用户在全局数组中添加或删除标题,全局数组将增长和缩小。
我不确定最好的方法,有什么建议吗?
注意:全局数组是从另一个单独的 viewController.swift 文件中填充的。我也希望在另一个 viewController.swift 中分配变量,因此我将这些变量设置为全局变量。但是我不确定如何根据表格视图中选择的标题分配不同的变量值。
import UIKit
var Programs: [String] = []
var Variable1: [String] = []
var Variable2: [String] = []
var Variable3: [String] = []
class ProgramList: UIViewController, UITableViewDataSource, UITableViewDelegate{
@IBOutlet weak var programTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
load()
}
override func viewDidAppear(_ animated: Bool) {
programTableView.reloadData()
save()
}
//saving current state of programs array
func save(){
UserDefaults.standard.set(Programs, forKey: "notes")
}
//loading saved program array
func load() {
if let loadedData: [String] = UserDefaults.standard.value(forKey: "notes") as? [String] {
Programs = loadedData
programTableView.reloadData()
}
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return Programs.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCell
cell.programTitle.text = Programs[indexPath.row]
return cell
}
//Removing Item by swipping left & saving this newly established array
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCell.EditingStyle.delete {
Programs.remove(at: indexPath.row)
programTableView.reloadData()
save()
}
}
}
【问题讨论】:
-
考虑面向对象。使用包含一个任务的所有属性而不是多个数组的自定义结构。
标签: arrays swift uitableview variables nsuserdefaults