gpt4 book ai didi

ios - 如何在 UITableViewCell 中创建未知数量的 UILabels?

转载 作者:行者123 更新时间:2023-12-01 19:36:56 25 4
gpt4 key购买 nike

我正在 build 一个 iOS使用 UITableView 的应用程序显示为接下来的 7 天安排的事件。

类(class)ThisWeekViewController根据给定的日期获取保存在数据库中的事件,并返回一个包含该日期所有事件名称的字符串数组,称为“projectNamesForCurrentDay”。

在我的 TableView 里面,我正在使用自定义 UITableViewCell类叫 ThisWeekTableViewCell它应该包含一个日期编号、日期名称,在其下方是一个项目符号列表,显示当天安排的所有项目:

enter image description here

我花了一周的大部分时间试图找出处理程序化、有条件地创建和在我的 Cell 中放置标签的最佳方法,但我仍然不确定我应该如何正确解决这个问题。显然,保存我的事件名称的数组可用于确定所需标签的数量以及每个标签的文本属性。但是标签应该在单元格内部还是在 ViewController 中创建和配置?如果是前者,我如何从我的单元类内部访问事件名称数组?

最佳答案

尝试这个 :

我试过一个例子。您可以根据您的要求进一步更改它。

View Controller :

class ViewController: UIViewController {

let dict1: [String:Any] = ["Date": "31", "Name": "Yesterday", "Meetings": ["Abc","Abc","Abc","Abc","Abc","Abc","Abc","Abc"]]
let dict2: [String:Any] = ["Date": "1", "Name": "Today", "Meetings": ["Abc","Abc","Abc","Abc","Abc"]]
let dict3: [String:Any] = ["Date": "2", "Name": "Tomorrow", "Meetings": ["Abc","Abc","Abc"]]

var arrayData:[[String: Any]] = []

@IBOutlet weak var tableView: UITableView!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
arrayData = [dict1, dict2,dict3]

tableView.register(UINib(nibName: "CustomTableViewCell", bundle: nil), forCellReuseIdentifier: "cellReuse")
}
}

extension ViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arrayData.count
}

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

cell.populate(data: arrayData[indexPath.row])
return cell
}
}

自定义表格 View 单元格:
class CustomTableViewCell: UITableViewCell {

@IBOutlet weak var dateLabel: UILabel!
@IBOutlet weak var nameLabel: UILabel!
@IBOutlet weak var stackView: UIStackView!

func populate(data: [String: Any]) {
dateLabel.text = data["Date"] as? String
nameLabel.text = data["Name"] as? String

guard let meetingsArray = data["Meetings"] as? [String] else {
return
}

for views in stackView.arrangedSubviews {
views.removeFromSuperview()
}
for meeting in meetingsArray {
let label = createLabel(meeting: meeting)
stackView.addArrangedSubview(label)
}
}

func createLabel(meeting: String) -> UILabel {
let label = UILabel()
label.textColor = UIColor.black
label.numberOfLines = 0
label.text = meeting
return label
}
}

自定义单元格 Xib:

enter image description here

模拟器输出:

enter image description here

希望这可以帮助。

关于ios - 如何在 UITableViewCell 中创建未知数量的 UILabels?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59885048/

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