我想在应用中重用UITableViewCell
,但出现此错误:意外地发现nil,同时隐式展开了Optional值。
我发现这是因为UITableViewCell
中的UI内容为零,所以我的应用程序崩溃了。
我的UITableViewCell
代码如下:
class WordListCell: UITableViewCell {
@IBOutlet weak var wordListCoverImage: UIImageView!
@IBOutlet weak var wordListName: UILabel!
@IBOutlet weak var wordListInfo: UILabel!
var wordList: WordList? {
didSet {
updateUI()
}
}
private func updateUI() {
wordListName.text = wordList?.name
wordListInfo.text = wordList?.description
wordListCoverImage = UIImage()
}
}
我在storyboard
中创建它,并将outlet
链接到另一个TableView
中的代码。
但是这一次,我想在新的TableView
中重用该单元格,该单元格全部是由代码创建的,所以我不知道如何初始化UI内容。
新的UITableView
代码如下:
tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")
//the delegate
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return wordLists.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let wordList = wordLists[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath)
if let wordListCell = cell as? WordListCell {
wordListCell.wordList = wordList
}
return cell
}
请告诉我如何重复使用单元格。谢谢!
答案 0 :(得分:1)
好的,所以我认为您做的是在创建自定义tableView单元格时未分配UIImage。因此,请尝试执行此wordListCoverImage = UIImage(named: wordList.imageName)
。
除了添加
之外,现在还可以在viewDidLoad()内的tableView类中使用tableView.delegate = self
tableView.dataSource = self
tableView.register(WordListCell.self, forCellReuseIdentifier: "wordListCell")
然后在let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath)
下将其向下转换为自定义单元格类,就像这样。
let cell = tableView.dequeueReusableCell(withIdentifier: "wordListCell", for: indexPath) as! WordListCell
然后在该设置下最终cell.delegate = self
我希望这会有所帮助!