gpt4 book ai didi

swift - 在 2 个 TableView 中使用结构体(一个 TableView 在另一个 TableView 中)

转载 作者:行者123 更新时间:2023-11-30 11:10:46 28 4
gpt4 key购买 nike

我有一个有趣的问题。我有两个 TableView ,一个在另一个里面。我有一个结构,我想用它来将数据添加到我的 TableView 中。该结构有 2 个字符串项和另一个具有 3 个字符串项的结构的数组。简单的东西。

第一个结构体有一个带名称、它的位置和一个成员数组。第二个结构体有成员的名字、姓氏和角色。

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

我对第一个 TableView 没有问题,但当谈到第二个 TableView 时我完全迷失了。

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

我将添加下面的代码。

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 中的每一行都是一个带区。然后该行中是另一个 TableView ,可以从该表中选择每个乐队成员。

附上图片。

第一个 Tableview 有波段列表。第二个表格 View 包含该乐队中的乐队成员列表

image

最佳答案

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

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 以明确它代表的含义。

关于swift - 在 2 个 TableView 中使用结构体(一个 TableView 在另一个 TableView 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52201089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com