我有一个tableViewCell,我需要将一个数组传递给tableViewCell,而不仅仅是传递给文本标签或类似的东西。我让我的代码显示出来。
我的TableViewController:
let subjectsDict = ["Spanish": ["Lesson 1", "Lesson 2"], "Math":["Problem set 1", "Problem set 2"], "Science": ["Lab"]]
let subjectArray = ["Spanish", "Math", "Science"]
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: "subjectCell", for: indexPath) as? SubjectTableViewCell else {
return UITableViewCell()
}
cell.subjectList = subjectsDict[subjectArray[indexPath.row]]
return cell
}
我的tableViewCell看起来像这样。
class subjectTableViewCell: UITableViewCell {
var subjectList: [String] = []
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style , reuseIdentifier: reuseIdentifier)
setUpTable()
}
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
}
override func awakeFromNib() {
super.awakeFromNib()
setUpTable()
}
func setUpTable() {
print(subjectList)
}
//other code for creating the cell
}
但是当我从subjectTableViewCell打印subjectList时,它会打印none
答案 0 :(得分:1)
您的代码不会尝试使用值subjectList
更新单元格的内容。您显示的只是一个print
。
还请注意,在尝试设置print
之前,您的subjectList
已被调用。并记住,细胞会被重用。 setUpTable
只会被调用一次,但是subjectList
会随着使用该单元格而不断被设置。
最简单的解决方案是在设置subjectList
后更新单元格。
var subjectList: [String] = [] {
didSet {
textLabel?.text = subjectList.joined(separator: ", ")
}
}
我假设您正在使用标准的textLabel
属性。如果您有自己的标签,请相应更新。
答案 1 :(得分:0)
如果您只想在单元格中的setUpTable()
更新时调用subjectList
,请尝试使用:
var subjectList: [String] = [] {
didSet {
setUpTable()
}
}
答案 2 :(得分:0)
您正在初始化表视图单元时尝试打印subjectList,因此此时您尚未设置subjectList。如果要打印subjectList,可以在设置它之后进行。
执行此行之后:
cell.subjectList = subjectsDict[subjectArray[indexPath.row]]