我主要是iOS和Xcode开发人员的新手,所以我现在只是在这里索要一些东西...
我正在制作一个具有医疗症状的TableView的应用程序。我设法用来自数组的数据填充tableview并将其分为取决于医学专业的部分。但是,关于能够在表中选中多个症状,并将其保存以供以后在另一个ViewController中使用,我遇到了麻烦。
对我来说,最容易理解的方法是创建包含整个症状列表的字典,然后根据是否被选中来为每个症状分配一个布尔值。但是我不知道如何实现包含所有数据的结构,以及如何将其分成多个部分。
我还想知道,将所有数据保存在外部文件中并允许应用访问数据是否会更好。
如果需要,我可以添加我到目前为止编写的代码。
我们将不胜感激!
下面是我当前对数据源的实现
let SymptomsSections = ["General", "Respiratory", "Cardiac", "Abdominal", "Neurological", "Psychiatrical"]
let SymptomsList =
[
["Dry mouth", "Malaise", "Asthenia"],
["Dyspnoea", "Wheezing"],
["Orthopnoea", "Angina"],
["Coffee ground vomiting", "Melaena"],
["Agnosia", "Apraxia"]
]
以及将其写入tableView的代码
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String?
{
return self.SymptomsSections[section]
}
override func numberOfSections(in tableView: UITableView) -> Int
{
return self.SymptomsSections.count
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
{
return SymptomsList[section].count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
{
let cell = tableView.dequeueReusableCell(withIdentifier: "SymptomsCell", for: indexPath)
cell.textLabel?.text = SymptomsList[indexPath.section][indexPath.row]
return cell
}
答案 0 :(得分:2)
更新后的答案
我运行了OP共享的代码,发现它崩溃了。这样做的主要原因是因为SymptomsSections
和SymptomsList
的内容数不相同,因此导致out of index range crash
用于较小的数组,在我们的例子中是{{1} }。要解决此问题,我添加了行SymptomsList
,该行基本上在访问给定索引之前检查是否存在任何对象。这解决了我们的崩溃。然后,我着手更新字典和访问方法。还随附了输出屏幕,供您理解。
请输入验证码
SymptomsList.indices.contains(index)
原始答案
好吧,要展示一些东西,您需要知道那件事。不知道如何获取数据。但是我可以想象您用于表视图的数据源看起来像这样:
let SymptomsSections = ["General", "Respiratory", "Cardiac", "Abdominal", "Neurological", "Psychiatrical"]
let SymptomsList = [[["name":"Dry mouth", "checked" : true], ["name":"Malaise", "checked" : false], ["name":"Asthenia", "checked" : true]],
[["name":"Dyspnoea", "checked" : true], ["name":"Wheezing", "checked" : false]],
[["name":"Orthopnoea", "checked" : false], ["name":"Angina", "checked" : true]],
[["name":"Coffee ground vomiting", "checked" : true], ["name":"Melaena", "checked" : true]],
[["name":"Agnosia", "checked" : false], ["name":"Apraxia", "checked" : true]]]
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return self.SymptomsSections[section]
}
func numberOfSections(in tableView: UITableView) -> Int {
return self.SymptomsSections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if SymptomsList.indices.contains(section) {
return SymptomsList[section].count
} else {
return 0
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SymptomsCell", for: indexPath)
if SymptomsList.indices.contains(indexPath.section) {
cell.textLabel?.text = SymptomsList[indexPath.section][indexPath.row]["name"] as? String
if SymptomsList[indexPath.section][indexPath.row]["checked"] as! Bool {
cell.accessoryType = UITableViewCellAccessoryType.checkmark
} else {
cell.accessoryType = UITableViewCellAccessoryType.none
}
} else {
cell.textLabel?.text = nil
cell.accessoryType = UITableViewCellAccessoryType.none
}
return cell
}
您说对了,最简单的方法就是使用字典,这是对的。想象一下,让更新后的数据源是字典数组,就像这样:
let symptoms = ["fever", "cold", "heart ache"]
以let symptoms = [["name":"fever", "checked":true], ["name":"cold", "checked":true], ["name":"heart ache", "checked":false]]
方法分配单元格时。您可以使用如下所示的内容:
cellForRow