如何使每个UITableViewOption都有自己的数据

时间:2018-06-26 21:36:21

标签: ios swift

我正在尝试让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])
    }

2 个答案:

答案 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