//自定义单元格在一个快速文件中
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
当我运行应用程序时,我不知道为什么我的表格单元格中的所有属性都是nil。
答案 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).