Swift 如何通过表视图传递数据
我的数据结构示例Swift 如何通过表视图传递数据,swift,uitableview,Swift,Uitableview,我的数据结构示例 Sports Bat-and-ball Baseball Softball Cricket Hockey Field Hockey Ice Hockey Roller Hockey Engineering Computer Science Software Engineer
Sports
Bat-and-ball
Baseball
Softball
Cricket
Hockey
Field Hockey
Ice Hockey
Roller Hockey
Engineering
Computer Science
Software Engineer
Electrical Engineer
这里我有三个级别的数据,如您所见。但默认情况下,在tableview中,它最多只提供2级。如何显示第三级数据。
我只能使用customcell以节的形式显示第一级数据,以行的形式显示第二级数据。现在显示第三级数据的位置。这样我就可以根据行数进行迭代
我的屏幕应该是这样的
有很多方法可以做到这一点 稍后我将列出其中的几个。 但首先,您可能会考虑在一个表视图中显示三个级别的数据是否是一种良好的用户体验。用户可能很难在其中导航 这是一些选择
您可以在自定义单元格中添加表格,第二级和第三级数据可以显示在该内部表格上 这段代码在我的设备上运行得很好 情节提要 TableViewController1
import UIKit
class TableViewController1: UITableViewController {
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return group1.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = group1[indexPath.row].title
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "segue1" {
let indexPaths = self.tableView!.indexPathsForSelectedRows!
let indexPath = indexPaths[0] as NSIndexPath
let vc = segue.destinationViewController as! TableViewController2
vc.currentGroup = group1[indexPath.row].title
}
}
}
TableViewController2
import UIKit
class TableViewController2: UITableViewController {
var currentGroup: String?
var filteredData = [Data]()
override func viewDidLoad() {
super.viewDidLoad()
for data in group2 {
if data.group == currentGroup {
filteredData.append(data)
}
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = filteredData[indexPath.row].title
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "segue2" {
let indexPaths = self.tableView!.indexPathsForSelectedRows!
let indexPath = indexPaths[0] as NSIndexPath
let vc = segue.destinationViewController as! TableViewController3
vc.currentGroup = group2[indexPath.row].title
}
}
}
TableViewController3
import UIKit
class TableViewController3: UITableViewController {
var currentGroup: String?
var filteredData = [Data]()
override func viewDidLoad() {
super.viewDidLoad()
for data in group3 {
if data.group == currentGroup {
filteredData.append(data)
}
}
}
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return filteredData.count
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)
cell.textLabel?.text = filteredData[indexPath.row].title
return cell
}
}
数据类
import Foundation
class Data {
var title: String
var group: String?
init (title: String, group: String?) {
self.title = title
self.group = group
}
}
let group1 = [Data(title: "Sport", group: nil), Data(title: "Engineering", group: nil)]
let group2 = [Data(title: "Hockey", group: "Sport"), Data(title: "CS", group: "Engineering")]
let group3 = [Data(title: "Ice Hockey", group: "Hockey"), Data(title: "Software Engineer", group: "CS")]
另外,我不喜欢把事情复杂化
快乐的黑客 好的,那么第二级和第三级将如何与第一级相关。我指的是倒计时。如果您有任何示例,请在自定义单元格中发送,您只需将数组传递给行方法dictionaryVitals.count>0{cell.datatitleArray=dictionarydata[0]as!NSArray cell.dateArray=dictionarydata[1]as!NSArray}单元格中的另一个单元格数组,但我的要求仅此一个。我拿了两个细胞的原型。一个用于将截面数据显示为第一级。在上面我按下按钮展开它。然后在第二个原型单元中,我现在显示第二级数据。但是在扩展了第二级和第三级之后,它应该在同一时间出现在自己的迭代中。你能发布截图或模拟吗?那么它应该是什么样子?您在这里描述的内容与您在问题中提出的内容不同。只有我更改了json数据,没有其他更改。。请看这里的屏幕。然后你可以使用我建议的第一种方法。将顶层数据放在单独的控件中(下拉视图)。然后将此控件用作tableHeaderView。然后将第二级数据用于节,将第三级数据用于行。因此,您只需要将数据分成两部分:1。下拉列表(第一级)2的行数组。表格视图的节数组(第二级)和行(第三级)是否可能在节中显示第一个数据。然后在第行中再次使用一个tableview,我可以在其中显示其他tableview部分的第二级,在其行中显示第三级数据。所以这里没有赛格。我的要求是在一个tableview中获取所有数据。通过segue连接的不是三个不同的tableview。