iOS Swift:将数据从ViewController传递到UITableViewCell

时间:2015-03-08 03:16:07

标签: ios swift

我正在尝试将数据从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)
    }
}

2 个答案:

答案 0 :(得分:0)

CustomCell.swift

,您只需设置内容,例如:UILabelUIImage等。

不是在这里解释整个事情,我认为你最好按照这里的教程: 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
}

它应该可以工作