在表格视图的单元格中创建表格视图

时间:2018-06-27 21:16:14

标签: ios swift uitableview

我有一个包含状态列表的表视图。我没有使用TableViewController创建表视图。我只是将TableView拖到情节提要中。我想知道如何在状态TableView的每个单元格中产生一个表视图。在每个状态单元格内的表格视图中,我希望它包含另一个表格视图,该表格视图具有专门应用于该州的城市列表。例如,“密歇根州”单元格包含城市“底特律”和“弗林特”,而“伊利诺伊州”单元格包含城市“芝加哥”和“罗克福德”(每个州将包含两个以上的城市,这只是一个例子。 )

下面我附上了我的代码。您能否提供清晰的编码以及在何处放置新代码。

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])
    }
}

1 个答案:

答案 0 :(得分:0)

也许您要在表格视图中询问部分。只需尝试使用此代码即可获得结果。

enter image description here

import UIKit

class ViewController: UIViewController {


    @IBOutlet weak var mytbl: UITableView!

    var names = ["Illinois": ["Chicago", "Rockford"], "Michigan": ["Detroit", "Flint"]]

    struct States {
        var sectionName : String!
        var sectionObjects : [String]!
    }
    var stateArray = [States]()


    override func viewDidLoad() {
        super.viewDidLoad()

        for (key, value) in names {
            print("\(key) -> \(value)")
            stateArray.append(States(sectionName: key, sectionObjects: value))
        }
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

extension ViewController : UITableViewDelegate,UITableViewDataSource{

    func numberOfSections(in tableView: UITableView) -> Int {
        return stateArray.count
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return stateArray[section].sectionObjects.count
    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)

        // Configure the cell...
        cell.textLabel?.text = stateArray[indexPath.section].sectionObjects[indexPath.row]
        return cell
    }

    func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {

        return stateArray[section].sectionName
    }

}