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

car*_*ary 0 uitableview custom-cell tableviewcell ios swift

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

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!

}
Run Code Online (Sandbox Code Playgroud)

//自定义表视图控制器在另一个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
    }
Run Code Online (Sandbox Code Playgroud)

运行应用程序会触发错误

故事板

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

Tus*_*rma 6

注册有两种变体,但它们都带有一个名为forCellReuseIdentifier的参数,该参数 是一个字符串,可以让您注册 不同类型的表视图单元格.例如,您可能具有重用标识符"DefaultCell",另一个称为"Heading cell",另一个称为"CellWithTextField",依此类推.以这种方式重用不同的单元有助于节省系统资源.

如果要将register()与Swift类一起使用,则提供表视图单元类作为其第一个参数.如果您的单元格完全由代码定义,则此选项非常有用.例如,这使用默认的UITableViewCell类:

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "DefaultCell")
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样将该单元格出列:

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

另一种选择是将register()Interface Builder nib文件一起使用.Nib包含要与其设计一起使用的类名,因此这种方法更常见.这是一个例子

tableView.register(UINib(nibName: "yourNib", bundle: nil), forCellReuseIdentifier: "CellFromNib")
Run Code Online (Sandbox Code Playgroud)

但是如果您正在使用故事板,您会发现创建原型单元并直接在Interface Builder中为它们提供重用标识符会更容易.所以不需要以编程方式注册.

删除此行表单 viewDidLoad

tableView.register(CardTableViewCell.self, forCellReuseIdentifier: "cardCell). 
Run Code Online (Sandbox Code Playgroud)