IBoutlet在我的自定义表格单元格中是否为零?

时间:2017-02-22 00:39:35

标签: ios swift uitableview tableviewcell custom-cell

//自定义单元格在一个快速文件中

import UIKit

class CardTableViewCell: UITableViewCell {

    @IBOutlet weak var elapsedTime: UILabel!
    @IBOutlet weak var todo: UILabel!
    @IBOutlet weak var startAndStop: UIView!
    @IBOutlet weak var progress: UIView!
    @IBOutlet weak var cardView: UIView!

}

//另一个swift文件中的自定义表视图控制器

import UIKit

class CardFeedTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell")
        tableView.delegate = self
        tableView.dataSource = self
    }

    // MARK: - Table view data source

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 3
    }


    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: CardTableViewCell = self.tableView.dequeueReusableCell(withIdentifier: "cardCell", for: indexPath) as! CardTableViewCell
        cell.todo.text = "study"
        return cell
    }

running the app triggers a error

storyboard

当我运行应用程序时,我不知道为什么我的表格单元格中的所有属性都是nil。

1 个答案:

答案 0 :(得分:5)

  

注册有两种变体,但都采用一个名为的参数    forCellReuseIdentifier ,这是一个字符串,可让您注册   不同种类的表格视图单元格。例如,你可能有一个   重新使用标识符“DefaultCell”,另一个名为“标题单元格”,   另一个“CellWithTextField”,依此类推。重新使用不同的细胞   这种方式有助于节省系统资源。

     

如果要对Swift类使用 register(),则提供表   查看单元格类作为其第一个参数。 如果你的手机是这个,这很有用   完全由代码定义。例如,这使用默认值   UITableViewCell类:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")

然后您可以将此单元格出列如下:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "DefaultCell")!
    return cell
}
  

另一种选择是将 register() Interface Builder笔尖一起使用   文件 Nib包含要与其设计一起使用的类名,所以   这种方法比较常见。这是一个例子

tableView.register(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellFromNib")
  

但如果您使用的是故事板,您会发现它更容易创建   原型单元格并直接在其中给出重用标识符   Interface Builder。因此无需以编程方式注册

删除此行格式viewDidLoad

tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell).