我正在尝试让UITableView中的每个选择都有自己独特的数据集。例如,在表格视图中,我有一个州列表,然后在单击一个州时,我希望每个州都有一个与之相对应的城市列表。我在下面附加了我的代码,该代码仅适用于UITableView。如果可以的话,请在您需要的答案中包含代码以及将其放置在何处,我已经尝试了一段时间。我是Xcode / swift的新手,并会逐步了解它。谢谢!
import UIKit
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
@IBOutlet weak var tableView: UITableView!
let textCellIdentifier = "TextCell"
var states = ["Illinois", "Indiana", "Kentucky", "Michigan", "Ohio", "Pennsylvania", "Wisconsin"]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return states.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: textCellIdentifier, for: indexPath)
let row = indexPath.row
cell.textLabel?.text = states[row]
return cell
}
private func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
let row = indexPath.row
print(states[row])
}
答案 0 :(得分:0)
您可以像这样构建数组模型
struct MainItem {
var name:String
var cities:[String]
init(name:String,cities:[String]) {
self.name = name
self.cities = cities
}
}
//
let item1 = MainItem(name:"Illinois",cities:["city1","city2"])
let item2 = MainItem(name:"Indiana",cities:["city3","city4"])
var states = [item1,item2]
//
在cellForRowAt
cell.textLabel?.text = states[row].name
//
在didSelectRowAtIndexPath
let cities = states[row].cities
答案 1 :(得分:0)
最近,我通过为每个想要的代表创建单独的类来做到这一点。将所有表函数移到新类中,并在新控制器中创建该类的实例。在视图中,load函数为第一个表设置了委托。每当您使用按钮或其他方式切换表时,请执行nextTable.delegate = xxxx。
查看控制器代码:
let eventLogTableController = EventLogTableController()
let missedEventLogController = MissedEventTableController()
@IBOutlet weak var emptyTableLabel: UILabel!
@IBOutlet weak var missedEventLog: UITableView!
override func viewDidLoad() {
self.eventLog.delegate = eventLogTableController