在2个tableViews中使用结构(另一个tabelView中的一个tabelView)

时间:2018-09-06 09:37:31

标签: swift uitableview swift4

我有一个有趣的问题。我有两个表视图,一个在另一个内。我有一个要用于向表视图添加数据的结构。该结构具有2个字符串项,另一个结构的数组具有3个字符串项。简单的东西。

第一个结构具有乐队名称,其位置和成员数组。 第二个结构具有成员的名字,姓氏和角色。

在第一个表格视图中,我想在标签中传递乐队名称。 在第二个表格视图中,我想传递每一行中的所有成员。

我对第一个表格视图没有问题,但是在第二个表格视图上我完全迷失了。

我欢迎所有帮助。干杯。 乔纳斯(Jonas)

我将在下面添加代码。

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

var band = [Band]()
var members = [Member]()

@IBOutlet weak var firstTableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()
    firstTableView.delegate = self
    firstTableView.dataSource = self

    addBandsAndMembers()

}

func addBandsAndMembers() {
    members.append(Member(firstName: "Eddie", lastName: "Vedder", role: "Singer"))
    members.append(Member(firstName: "Stone", lastName: "Gossard", role: "Guitar"))
    members.append(Member(firstName: "Mike", lastName: "McCready", role: "Guitar"))
    members.append(Member(firstName: "Jeff", lastName: "Ament", role: "Bass"))
    members.append(Member(firstName: "Matt", lastName: "Cameron", role: "Drums"))

    band.append(Band(name: "Pearl Jam", place: "Seattle", members: members))

    members.removeAll()

    members.append(Member(firstName: "Andy", lastName: "Wood", role: "Singer"))
    members.append(Member(firstName: "Stone", lastName: "Gossard", role: "Guitar"))
    members.append(Member(firstName: "Bruce", lastName: "Fairweather", role: "Guitar"))
    members.append(Member(firstName: "Jeff", lastName: "Ament", role: "Bass"))
    members.append(Member(firstName: "Greg", lastName: "Gilmore", role: "Drums"))

    band.append(Band(name: "Mother Love Bone", place: "Seattle", members: members))
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    if tableView.tag == 100 {
        return band.count
    }else {
        return band.count    // This is puzzeling me
    }
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if tableView.tag == 100 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "firstTableViewCell", for: indexPath) as! firstTableViewCell
            cell.label.text = band[indexPath.row].name
        return cell
    }else {
        let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableViewCell", for: indexPath) as! secondTableViewCell
        cell.firstName.text = band[indexPath.row].members[indexPath.row].firstName
        print(band[indexPath.row].members[indexPath.row].firstName)
        return cell
    }
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if tableView.tag == 100 {
        return 190
    }else {
        return 35
    }
}
}


class firstTableViewCell: UITableViewCell {
@IBOutlet weak var secondTableView: UITableView!
@IBOutlet weak var label: UILabel!

func setTableViewDataSourceDelegate <D: UITableViewDelegate & UITableViewDataSource> (_ dataSourceDelegate: D, forRow rom: Int){
    secondTableView.delegate = dataSourceDelegate
    secondTableView.dataSource = dataSourceDelegate
    secondTableView.reloadData()
}
}

class secondTableViewCell: UITableViewCell {
@IBOutlet weak var firstName: UILabel!
@IBOutlet weak var lastName: UILabel!
@IBOutlet weak var role: UILabel!

}

struct Band {
var name: String
var place: String
var members: [Member]
}

struct Member {
var firstName: String
var lastName: String
var role: String
}

我要完成的工作是列出乐队列表。表格视图中的每一行都是一个带。然后在该行的另一个表格视图中,可以从该表格中选择每个乐队成员。

附有图片。

第一个Tableview具有乐队列表。第二张表格视图包含该乐队的乐队成员列表

image

1 个答案:

答案 0 :(得分:0)

好的,我在这里要做的是使用部分。每个乐队都有自己的表视图部分,该部分中的每一行都是乐队成员。小节标题可以包含乐队名称的标签,并且每一行可以包含成员的标签。

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

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    return bands[section].members.count
}

func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
    return bands[section].name
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "secondTableViewCell", for: indexPath) as! secondTableViewCell
    // Configure the cell here...
    return cell
}

此外,我将secondTableViewCell重命名为BandMemberCell以便清楚地表示其含义。