我正在尝试将数据从ViewController传递到自定义UITableViewCell,但它无法正常工作。当我从data
打印ViewController.swift
时,一切都很顺利,但是当我从data
打印CustomCell.swift
时,数组是空的。这是我的代码:
ViewController.swift
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier(kCellIdentifier) as! CustomCell
cell.data = data[indexPath.row]
return cell
}
CustomCell.swift
class CustomCell: UITableViewCell {
var data = [CKRecord]()
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
println(data)
}
}
答案 0 :(得分:0)
CustomCell.swift
中,您只需设置内容,例如:UILabel
,UIImage
等。
不是在这里解释整个事情,我认为你最好按照这里的教程: http://www.ioscreator.com/tutorials/prototype-cells-tableview-tutorial-ios8-swift
如果你有更多时间,这是更深层次的: http://www.raywenderlich.com/81879/storyboards-tutorial-swift-part-1
祝你好运! ^ _ ^答案 1 :(得分:0)
您只需使用 didSet
闭包即可执行此操作,将代码更改为以下内容:
class CustomCell: UITableViewCell {
var data = [Int]() {
didSet{
print(data)
}
}
var id: Int {
didSet{
loadById(id)
}
}
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
// This block runs before data being set! Rather call your code from didSet{} closure..
}
func loadById(_ id: Int) {
// Your code goes here
}
}
并从您的 ViewController 传递数据:
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell") as! CustomCell
cell.data = data[indexPath.row]
cell.id = 1 // pass here any variable you need
return cell
}
它应该可以工作